Wednesday 11 October 2017

Netwide Assembler Binäre Optionen


Der Netwide Assembler: NASM Der Netwide Disassembler, NDISASM Der Netwide Disassembler ist ein kleines Companion-Programm für den Netwide Assembler, NASM. Es schien eine Schande, einen x86-Assembler mit einer vollständigen Anweisungstabelle zu haben und nicht so viel Gebrauch wie möglich zu machen, also ist er ein Disassembler, der die Anweisungstabelle (und einige andere Bits des Codes) mit NASM teilt. Der Netwide Disassembler tut nichts außer, um Zerlegungen von binären Quelldateien zu erzeugen. NDISASM hat kein Verständnis von Objektdateiformaten, wie objdump. Und es wird nicht verstehen, DOS. EXE-Dateien wie Debug. Es zerlegt nur. Siehe Installationsanweisungen in Abschnitt 1.3. NDISASM, wie NASM, hat eine man-Seite, die Sie irgendwo sinnvoll einsetzen können, wenn Sie auf einem Unix-System sind. Um eine Datei zu disassemblieren, verwenden Sie in der Regel einen Befehl des Formulars NDISASM kann 16-, 32- oder 64-Bit-Code gleichermaßen leicht zerlegen, vorausgesetzt natürlich, dass Sie sich daran erinnern, zu spezifizieren, mit dem es arbeiten soll. Wenn kein Schalter - b vorhanden ist, arbeitet NDISASM standardmäßig im 16-Bit-Modus. Der Schalter - u (für USE32) ruft auch den 32-Bit-Modus auf. Zwei weitere Befehlszeilenoptionen sind - r, die die Versionsnummer des ausgeführten NDISASM melden, und - h, die eine kurze Zusammenfassung der Befehlszeilenoptionen enthält. Um eine DOS-Datei korrekt zu disassemblieren, muss ein Disassembler davon ausgehen, dass der erste Befehl in der Datei unter Adresse 0x100 geladen wird. Anstatt bei Null. NDISASM, das standardmäßig davon ausgeht, dass jede Datei, die Sie mit null beladen, über diese Informationen informiert werden muss. Mit der Option - o deklarieren Sie einen anderen Ursprung für die Datei, die Sie demontieren. Sein Argument kann in jedem der NASM numerischen Formate ausgedrückt werden: Dezimal standardmäßig, wenn es beginnt mit oder 0x oder endet in seinem hex. Wenn sie in Q ihr Oktal endet. Und wenn sie in B ihr Binär endet. Daher, um eine Datei zu zerlegen: wird den Trick tun. Angenommen, Sie dekomprimieren eine Datei, die einige Daten enthält, die kein Maschinencode sind, und enthält dann einen Maschinencode. NDISASM wird durch den Datenabschnitt treu pflügen, wo immer es möglich ist (obwohl die meisten von ihnen bizarr aussehen und einige ungewöhnliche Präfixe haben können, z. B. FS ODER AX, 0x240A) und DB-Befehle immer so oft erzeugen, wenn sie völlig verstopft sind . Dann wird es den Codeabschnitt erreichen. Angenommen, NDISASM hat gerade die Erzeugung eines seltsamen Maschinenbefehls von einem Teil des Datenabschnitts beendet, und seine Dateiposition ist nun ein Byte vor dem Beginn des Codeabschnitts. Es ist durchaus möglich, dass eine andere Fehlanweisung erzeugt wird, beginnend mit dem letzten Byte des Datenabschnitts, und dann wird die korrekte erste Anweisung in dem Codeabschnitt nicht gesehen, da der Ausgangspunkt darüber übersprungen wird. Das ist nicht wirklich ideal. Um dies zu vermeiden, können Sie einen Synchronisationspunkt oder sogar beliebig viele Synchronisationspunkte angeben (obwohl NDISASM intern nur 2147483647 Synchronisationspunkte behandeln kann). Die Definition eines Synchronisationspunktes ist: NDISASM garantiert, dass die Synchronisationspunkte genau während der Demontage getroffen werden. Wenn sie darüber nachdenkt, eine Anweisung zu erzeugen, die dazu führt, dass sie über einen Synchronisierungspunkt springt, wird sie diese Anweisung verwerfen und stattdessen ein db ausgeben. So wird es beginnen Demontage genau aus dem Synchronisierungspunkt, und so sehen Sie alle Anweisungen in Ihrem Code-Abschnitt. Sync-Punkte werden mit der Option - s angegeben: sie werden in Bezug auf den Ursprung des Programms und nicht die Dateiposition gemessen. Wenn Sie also nach 32 Byte einer Datei synchronisieren möchten, müssten Sie tun. Wie oben erwähnt, können Sie mehrere Synchronisierungsmarken angeben, wenn Sie dies nur benötigen, indem Sie die Option - s wiederholen. Nehmen wir an, dass Sie den Bootsektor einer DOS-Diskette demontieren (vielleicht hat es einen Virus, und Sie müssen das Virus verstehen, damit Sie wissen, welche Arten von Schäden es Ihnen getan haben könnte). Normalerweise enthält dies einen JMP-Befehl, dann einige Daten, dann den Rest des Codes. Es gibt also eine sehr gute Chance, dass NDISASM fehlausgerichtet ist, wenn die Daten endet und der Code beginnt. Daher ist ein Synchronisationspunkt erforderlich. Auf der anderen Seite, warum sollten Sie den Sync-Punkt manuell angeben Was youd tun, um zu finden, wo der Sync-Punkt wäre, wäre sicher, die JMP-Anweisung zu lesen, und dann seine Zieladresse als Synchronisationspunkt zu verwenden . So kann NDISASM das auch für Sie tun. Die Antwort ist natürlich ja: Mit einem der beiden Schalter - a (für automatische Synchronisation) oder - i (für intelligente Synchronisation) wird der automatische Synchronisationsmodus aktiviert. Der Auto-Sync-Modus erzeugt automatisch einen Synchronisierungspunkt für jede vorwärts gerichtete PC-relative Sprung - oder Aufrufanweisung, die NDISASM auftritt. (Da NDISASM ein One-Pass ist, wenn es auf einen PC-relativen Sprung stößt, dessen Ziel bereits verarbeitet wurde, kann es nicht viel dagegen tun.) Nur PC-relative Sprünge werden verarbeitet, da ein absoluter Sprung entweder über ein Register erfolgt (In welchem ​​Fall NDISASM nicht weiß, was das Register enthält) oder eine Segmentadresse einschließt (in diesem Fall ist der Zielcode nicht im selben Segment, in dem NDISASM arbeitet, und somit kann der Synchronisierungspunkt nicht überall platziert werden). Für einige Arten von Dateien, wird dieser Mechanismus automatisch setzen Sync-Punkte an allen richtigen Orten, und speichern Sie aus, um alle Synchronisierungspunkte manuell zu platzieren. Es sollte jedoch betont werden, dass der automatische Synchronisierungsmodus nicht garantiert ist, um alle Synchronisierungspunkte zu erfassen, und Sie müssen möglicherweise noch einige manuell platzieren. Der Auto-Sync-Modus hindert Sie nicht daran, die manuellen Synchronisierungspunkte zu deklarieren: Es fügt automatisch automatisch generierte diejenigen hinzu, die Sie bereitstellen. Es ist vollkommen möglich, - i und einige - s-Optionen angeben. Eine weitere Einschränkung mit Auto-Sync-Modus ist, dass, wenn durch einige unangenehme Fluke, etwas in Ihrem Datenteil zu einem PC-relativen Aufruf oder Sprung Anweisung zu zerlegen, NDISASM kann gehorsam einen Synchronisationspunkt an einem völlig zufälligen Ort, zum Beispiel in der Mitte einer der Anweisungen in Ihrem Codeabschnitt. So können Sie am Ende mit einer falschen Demontage, auch wenn Sie Auto-Sync verwenden. Auch hier kann ich nicht viel tun. Wenn Sie Probleme haben, müssen Sie die manuellen Synchronisationspunkte verwenden oder die Option - k verwenden (dokumentiert unten), um die Demontage des Datenbereichs zu unterdrücken. Die Option - e überspringt einen Header auf der Datei, indem die ersten N Bytes ignoriert werden. Das bedeutet, dass der Header nicht auf den Demontageversatz gezählt wird, wenn Sie - e10 - o10 angeben. Wird die Zerlegung in Byte 10 in der Datei beginnen, und dies wird mit Offset 10 und nicht mit 20 angegeben. Die Option - k wird mit zwei durch Kommas getrennten numerischen Argumenten versehen, wobei der erste ein Versatz der Anordnung und der zweite eine Zahl von ist Zu überspringen. Dies zählt die übersprungenen Bytes in Richtung Versatz der Assembly: seine Verwendung ist, um die Zerlegung eines Datenabschnittes zu unterdrücken, der nicht alles enthalten würde, das Sie überhaupt sehen wollten. Es sind keine Fehler bekannt. Allerdings sollten Sie mit Patches, wenn möglich, an nasm-bugslists. sourceforge gesendet werden. Oder auf die Entwickler-Website unter www. nasm. us/ und gut versuchen, sie zu beheben. Fühlen Sie sich frei, Beiträge und neue Funktionen zu senden. Was ist Nasm Die Netwide Assembler, NASM, ist ein 80x86 Assembler für Portabilität und Modularität entworfen. Es unterstützt eine Reihe von Objekt-Dateiformate, einschließlich Linux und NetBSD / FreeBSD a. out, ELF, COFF, Microsoft 16-Bit-OBJ und Win32. Es gibt auch einfache Binärdateien aus. Seine Syntax ist entworfen, um einfach und leicht zu verstehen, ähnlich Intel39s, aber weniger komplex. Es unterstützt Pentium, P6, MMX, 3DNow. SSE und SSE2 Opcodes, und hat Makro-Fähigkeit. WICHTIG Die Windows-Version ist etwas veraltet. Bitte folgen Sie diesem Link, um die neueste Version 0.98.39 zu erhalten. Warum diese Website NASM ist primär ein Linux-Projekt. Diese Website enthält das Installationspaket für Windows 9x / NT / 2k / XP und BeOS Release 5, zusätzliche Installationshinweise für Visual Studio Integration und BeIDE Integration und CHM Dokumentationsformat. Installieren von NASM unter Windows Wenn Sie das Win32-Archiv für NASM, nasmw-inst-XXX. exe (wobei XXX die Versionsnummer des im Archiv enthaltenen NASM bezeichnet) erhalten haben, doppelklicken Sie auf das Autoinstallationsprogramm und installieren es in seinem eigenen Verzeichnis ( Zum Beispiel C: Program FilesNASM). Das Archiv enthält zwei ausführbare Dateien: die ausführbaren NASM-Dateien nasmw. exe und die ausführbaren Dateien NDISASM ndisasm. exe und ndisasmw. exe. In jedem Fall ist die Datei, deren Name in w endet, eine ausführbare Win32-Datei, die unter Windows 95 oder Windows NT ausgeführt wird. Intel Integration in Microsoft Visual Studio 6 Seit 0.95.36 ist NASM vollständig offiziell mit Microsoft Visual Studio 6 / - In kompatibel Tools / Optionen / Verzeichnisse, Wählen 39Show Verzeichnisse für: 39 in 39Executable files39. Fügen Sie einen neuen Pfad hinzuC: Program FilesNASMquot (oder wo Sie Nasm installiert haben) - Erstellen Sie in Ihrem Projektarbeitsbereich einen neuen Ordner 39Assembler-Dateien39. - Klicken Sie in diesem Ordner mit der rechten Maustaste und wählen Sie 39Settings.39 - Im Allgemeinen aktivieren Sie 39Always use custom build step39. - Ändern Sie im Custom Build die folgenden Einstellungen: Integration in Microsoft Visual 2003/2005/2008 - Wählen Sie in Extras / Optionen / Projekte 39VC-Verzeichnisse 39 und 39 Verzeichnisse für anzeigen: 39 39Executable-Dateien39 - Sollte die Standardeinstellung sein. Drücken Sie Strg-Einfügen oder drücken Sie das Symbol 39New Line39. Wählen Sie den Pfad C: Programme FilesNASMquot (oder wo Sie Nasm installiert haben) - Erstellen Sie in Ihrem Projektarbeitsbereich einen neuen Ordner 39Assembler-Dateien39. - Klicken Sie in diesem Ordner mit der rechten Maustaste und wählen Sie 39Settings.39 - Im Allgemeinen aktivieren Sie 39Always use custom build step39. - Ändern Sie im Custom Build die folgenden Einstellungen: Befehle nasmw. exe - f win32 - Xvc - o (IntDir) (InputName).objquot (InputDir) (InputName).asm Installieren von NASM unter BeOS Sobald Sie das BeOS-Archiv für NASM erhalten haben , Nasm-beos-XXX. pkg (wobei XXX die Versionsnummer des im Archiv enthaltenen NASM angibt), doppelklicken Sie auf das Auto-Installationsprogramm und installieren es in seinem eigenen Verzeichnis. So verwenden Sie NASM in BeIDE Seit BeOS 5 wird NASM unterstützt Mit dem NASM Integration Plugin - Öffnen Sie die Option Project Settings, - fügen Sie ein neues Ziel 39.asm39 hinzu und wählen Sie tool 39nasm39. - Fügen Sie Ihre ASM-Dateien in Ihrem Projekt. - Alternativ wählen Sie. CC und wechseln zu ASM und NASM. Wie man eine einfache Assembler-Routine mit NASM zu schreiben. Bits 32 Abschnitt. bss align16 Abschnitt. data align16 Abschnitt. text align16 global myFunction myFunction: push ebp mov ebp, esp mov eax, ebp 8 // Geben Sie hier Ihren Code ein. Ebp ret END bei Verwendung von MSC, um die Prozedur zu exportieren: int cdecl myFunction (int Parameter) bei Verwendung von GCC, um die Prozedur zu exportieren: int myFunction (int-Parameter) Ansprechpartner Autor Getting NASM special edition 0.98.36 ---- --- Update rdoff - bibliothekar / archiver - allgemeine rec - docs Fixieren Sie signierte / unsigned Probleme. Fix JMP FAR Etikett und CALL FAR Etikett. Add neue Multisection-Unterstützung - Map-Dateien - fix align bug Fix sysexit, movhps / movlps reg, Reg Bugs in insns. dat quotQquot oder quotOquot Suffixe zeigen oktal Support Prescott neue Anweisungen. Cyrix XSTORE Anweisung. Außerdem wird die NASM-Dokumentation in der CHM-Version für das Windows-Paket bereitgestellt. Installation von BeOS 5. 286 KB Win32-Installation. 634 KB (C) Copyright 1999-2004 realtech VR. Alle Rechte vorbehalten. NASM ist unter LGPL. Die Lizenz, die als Teil eines NASM-Distributionsarchivs geliefert wird, finden Sie in den Lizenzbedingungen, unter denen Sie NASM. NASM verwenden können. Der Netwide Assembler ist ein 80x86 Assembler, der für Portabilität und Modularität entwickelt wurde. NASM ist ein 80x86 Assembler, der für Portabilität und Modularität entwickelt wurde. Das Projekt unterstützt eine Reihe von Objekt-Dateiformate einschließlich Linux a. out und ELF, COFF, Microsoft 16-Bit-OBJ und Win32. Es gibt auch einfache Binärdateien aus. Seine Syntax ist so konzipiert, dass es einfach und leicht zu verstehen, ähnlich wie Intels, aber weniger komplex. Es unterstützt Pentium, P6, MMX, 3DNow und SSE Opcodes und hat Makrofähigkeit. Es enthält auch einen Disassembler. Die Netwide Assembler wuchs aus einer Idee auf comp. lang. asm. x86 (oder möglicherweise alt. lang. asm - ich vergessen, die), die im Wesentlichen war, dass es nicht scheinen, um eine gute freie x86-Serie Assembler um, und das zu sein Vielleicht sollte jemand einen schreiben. - a86 ist gut, aber nicht kostenlos, und insbesondere erhalten Sie keine 32-Bit-Fähigkeit, bis Sie zahlen. Sein DOS nur, auch. - Gas ist kostenlos, und Ports über DOS und Unix, aber es ist nicht sehr gut, da es konzipiert, um ein Backend zu gcc, die immer füttert es korrekten Code. Seine Fehlerprüfung ist also minimal. Auch seine Syntax ist schrecklich, aus der Sicht von jemand versuchen, tatsächlich etwas in ihm schreiben. Außerdem können Sie nicht schreiben 16-Bit-Code in (richtig). - as86 ist Minix - und Linux-spezifisch, und (meine Version zumindest) scheint nicht viel (oder irgendeine) Dokumentation zu haben. - MASM ist nicht sehr gut, und seine (war) teuer, und es läuft nur unter DOS. - TASM ist besser, aber immer noch strebt für MASM-Kompatibilität, die Millionen von Richtlinien und Tonnen Bürokratie bedeutet. Und seine Syntax ist im Wesentlichen MASMs, mit den Widersprüchen und Macken, die mit sich bringt (obwohl es einige von ihnen durch Ideal-Modus aussortiert). Es ist teuer. Und seine DOS-only. Also hier, für Ihre Codierung Freude, ist NASM. Derzeit ist es noch im Prototypenstadium - wir dont versprechen, dass es irgendwelche dieser Assemblers übertreffen kann. Aber bitte, bitte schicken Sie uns Fehlerberichte, Fehlerbehebungen, hilfreiche Informationen und alles andere, was Sie an Ihren Händen bekommen können (und dank der vielen Menschen, die dies bereits getan haben, wissen Sie alle, wer Sie sind), und verbessern Sie sie aus aller Anerkennung . Aufs Neue. Installieren von NASM unter Unix Nachdem Sie das Unix-Quellarchiv für NASM, nasm-X. XX. tar. gz (wobei X. XX die Versionsnummer des im Archiv enthaltenen NASM bezeichnet) erhalten haben, entpacken Sie es in ein Verzeichnis wie / usr / Lokal / src. Das Archiv wird, wenn es entpackt wird, sein eigenes Unterverzeichnis nasm-X. XX erstellen. NASM ist ein auto-konfigurierendes Paket: Sobald Sie es entpackt haben, cd in das Verzeichnis seiner ausgepackt und geben Sie ./configure. Dieses Shell-Skript wird den besten C-Compiler finden, der für das Erstellen von NASM verwendet wird, und Makefiles entsprechend einzurichten. Sobald NASM automatisch konfiguriert ist, können Sie make eingeben, um die nasm - und ndisasm-Binärdateien zu erstellen und dann die Installation unter / usr / local / bin zu installieren und die man-Seiten nasm.1 und ndisasm.1 in / usr / local zu installieren / Man / man1. Alternativ können Sie Optionen wie --prefix zum configure-Skript (siehe die Datei INSTALL für weitere Details) oder die Programme selbst installieren. NASM kommt auch mit einem Satz von Dienstprogrammen für die Verarbeitung der RDOFF benutzerdefinierte Objekt-Datei-Format, die sich in der rdoff Unterverzeichnis des NASM-Archiv. Sie können diese mit machen rdf und installieren sie mit machen rdfinstall, wenn Sie sie wollen. Wenn NASM nicht automatisch konfiguriert wird, können Sie es trotzdem kompilieren, indem Sie das Notiz-Unix-Makefile Makefile. unx verwenden. Kopieren oder umbenennen, dass Datei Makefile und versuchen Sie es mit make. Es gibt auch eine Makefile. unx-Datei im Unterverzeichnis rdoff. Die NetWare Assembler: NASM Um eine Datei zusammenzustellen, geben Sie einen Befehl des Formulars wird myfile. asm in eine ELF-Objektdatei myfile. o zusammenbauen. Und wird myfile. asm in eine rohe Binärdatei myfile. Um eine Auflistungsdatei zu erzeugen, wobei die Hex-Codes, die von NASM ausgegeben werden, auf der linken Seite der Originalquellen angezeigt werden, verwenden Sie die Option - l, um beispielsweise einen Auflistungs-Dateinamen anzugeben: Um weitere Verwendungshinweise von NASM zu erhalten, Liste der verfügbaren Ausgabedateiformate und was sie sind. Wenn Sie Linux aber arent sicher, ob Ihr System a. out oder ELF ist, geben Sie (in dem Verzeichnis, in dem Sie die NASM-Binärdatei, wenn Sie es installiert). Wenn es so etwas wie Ihr System ist ELF, und Sie sollten die Option - f Elf, wenn Sie wollen NASM zu Linux-Objekt-Dateien zu produzieren. Wenn es sagt oder etwas ähnliches, ist Ihr System a. out. Und Sie sollten - f aout verwenden (Linux a. out Systeme gelten als veraltet und sind selten in diesen Tagen.) Wie Unix-Compiler und Assemblern, ist NASM schweigen, es sei denn, es schief geht: Sie sehen keine Ausgabe überhaupt, es sei denn, es gibt Fehlermeldungen. NASM wird in der Regel wählen Sie den Namen Ihrer Ausgabedatei für Sie genau, wie es dies abhängig von der Objekt-Dateiformat ist. Für Microsoft-Objekt-Dateiformate (obj und win32) entfernt es die. asm-Erweiterung (oder was auch immer die Erweiterung, die Sie verwenden möchten - NASM doesnt care) aus Ihrem Quelldateinamen und ersetzen. obj. Für Unix-Objekt-Dateiformate (aout. Coff. Elf und as86) ersetzt es. o. Für rdf. Wird es. rdf verwenden. Und für das bin-Format wird es einfach entfernen Sie die Erweiterung, so dass myfile. asm produziert die Ausgabedatei myfile. Wenn die Ausgabedatei bereits vorhanden ist, überschreibt NASM es, es sei denn, es hat denselben Namen wie die Eingabedatei, in diesem Fall wird es eine Warnung geben und stattdessen nasm. out als den Ausgabedateinamen verwenden. Für Situationen, in denen dieses Verhalten nicht akzeptabel ist, stellt NASM die Befehlszeilenoption - o bereit, mit der Sie den gewünschten Ausgabedateinamen angeben können. Sie rufen - o auf, indem Sie es mit dem Namen, den Sie für die Ausgabedatei wünschen, entweder mit oder ohne Zwischenraum eingeben. Zum Beispiel: Wenn Sie die Option - f nicht an NASM liefern, wählt sie ein Ausgabe-Dateiformat für Sie selbst aus. In den Distributionsversionen von NASM ist die Standardeinstellung immer bin, wenn Sie Ihre eigene Kopie von NASM kompiliert haben, können Sie OFDEFAULT zur Kompilierzeit neu definieren und wählen, was die Standardeinstellung sein soll. Wie - o. Ist der Zwischenraum zwischen - f und dem Ausgabe-Dateiformat optional, so dass - f elf und - felf beide gültig sind. Eine vollständige Liste der verfügbaren Ausgabedateiformate kann mit dem Befehl nasm - h angegeben werden. Wenn Sie die Option - l an NASM, gefolgt (mit dem üblichen optionalen Speicherplatz) durch einen Dateinamen angeben, erzeugt NASM eine Quellenauflistungsdatei für Sie, in der Adressen und generierter Code auf der linken Seite und die eigentliche Quelle aufgelistet sind Code mit Erweiterungen von mehrzeiligen Makros (mit Ausnahme derer, die explizit keine Erweiterung der Quelllisten verlangen: siehe Abschnitt 4.2.9). Zum Beispiel: Unter MS-DOS kann es schwierig (obwohl es Möglichkeiten gibt), um die Standard-Fehler-Ausgabe eines Programms in eine Datei umzuleiten. Da NASM in der Regel ihre Warn - und Fehlermeldungen auf stderr erzeugt. Kann es schwierig sein, die Fehler zu erfassen, wenn (zum Beispiel) Sie sie in einen Editor laden möchten. NASM bietet daher die Option - E, wobei ein Argument Dateiname, die Fehler an die angegebenen Dateien anstatt Standard-Fehler gesendet werden verursacht. Daher können Sie die Fehler in eine Datei umleiten, indem Sie die - s-Option umleitet, um Fehlermeldungen an stdout anstatt stderr weiterzuleiten. So dass es unter MS-DOS umgeleitet werden kann. Um die Datei myfile. asm zusammenzusetzen und ihre Ausgabe auf das weitere Programm zu pipettieren, können Sie Folgendes eingeben: Wenn NASM die Include-Direktive in einer Quelldatei sieht (siehe Abschnitt 4.5), sucht sie nicht nur im aktuellen Verzeichnis nach der angegebenen Datei, Sondern auch in allen Verzeichnissen, die in der Befehlszeile mit der Option - i angegeben werden. Daher können Sie Dateien aus einer Makrobibliothek einfügen, z. B. durch Eingabe (wie üblich ein Leerzeichen zwischen - i und dem Pfadnamen erlaubt und optional). NASM, im Interesse der kompletten Quellcode-Portabilität, versteht nicht, dass die Dateinamenkonventionen des Betriebssystems, das es auf der Zeichenfolge ausführt, die Sie als Argument für die Option - i angeben, genau dem Namen des Includes vorangestellt werden Datei. Daher ist der nachlaufende Backslash im obigen Beispiel notwendig. Unter Unix ist auch ein nachlaufender Schrägstrich nötig. (Sie können dies zu Ihrem Vorteil nutzen, wenn Sie wirklich pervers sind, indem Sie feststellen, dass die Option - ifoo dazu führen wird, dass bar. i die Datei foobar. i sucht.) Wenn Sie einen Standard-Include-Suchpfad definieren möchten / Usr / include auf Unix-Systemen, sollten Sie eine oder mehrere - i-Anweisungen in die NASM-Umgebungsvariable setzen (siehe Abschnitt 2.1.13). Für Makefile-Kompatibilität mit vielen C-Compilern kann diese Option auch als - I angegeben werden. Mit NASM können Sie Dateien festlegen, die in die Quelldatei eingefügt werden sollen, indem Sie die Option - p verwenden. Das Laufen entspricht also dem Ausführen von nasm myfile. asm und das Platzieren der Direktive schließt myinc. inc am Anfang der Datei ein. Für die Konsistenz mit der - I. - D und - U, kann diese Option auch als - P angegeben werden. So wie die Option - p eine Alternative zum Platzieren von Direktiven am Anfang einer Quelldatei bietet, gibt die Option - d eine Alternative zum Platzieren einer Definitionsrichtlinie. Sie könnten als Alternative zum Platzieren der Richtlinie am Anfang der Datei kodieren. Sie können auch den Makrowert verpassen: Die Option - dFOO entspricht der Coding-Definition FOO. Diese Form der Richtlinie kann für die Auswahl von Assembly-Time-Optionen nützlich sein, die dann mit ifdef getestet werden. Zum Beispiel - dDEBUG. Für Makefile-Kompatibilität mit vielen C-Compilern kann diese Option auch als - D angegeben werden. Die Option - u definiert ein Makro, das ansonsten vordefiniert sein sollte, entweder automatisch oder durch eine zuvor angegebene Option - p oder - d auf den Befehlszeilen. Beispielsweise würde die folgende Befehlszeile dazu führen, dass FOO kein vordefiniertes Makro im Programm ist. Dies ist nützlich, um an einem anderen Punkt in einem Makefile angegebene Optionen zu überschreiben. Für Makefile-Kompatibilität mit vielen C-Compilern kann diese Option auch als - U angegeben werden. NASM ermöglicht die Ausführung des Präprozessors bis zu einem gewissen Punkt. Mit der Option - e (die keine Argumente erfordert) wird NASM dazu veranlasst, seine Eingabedatei vorzuverarbeiten, alle Makroreferenzen zu erweitern, alle Kommentare und Präprozessor-Direktiven zu entfernen und die resultierende Datei auf die Standardausgabe zu drucken (oder sie in einer Datei zu speichern, Wenn die Option - o ebenfalls verwendet wird). Diese Option kann nicht auf Programme angewendet werden, bei denen der Präprozessor die Auswertung von Ausdrücken erfordert, die von den Werten der Symbole abhängen: also Code, der einen Fehler im vorprozessualen Modus verursacht. Wenn NASM als Backend für einen Compiler verwendet wird, könnte es wünschenswert sein, die Vorverarbeitung vollständig zu unterdrücken und davon auszugehen, dass der Compiler es bereits getan hat, um Zeit zu sparen und die Kompilierungsgeschwindigkeiten zu erhöhen. Die Option - a, die kein Argument erfordert, weist NASM an, ihren leistungsfähigen Präprozessor durch einen Stub-Präprozessor zu ersetzen, der nichts macht. NASM kann viele Bedingungen während der Montage beobachten, die für den Benutzer erwähnenswert sind, aber nicht einen hinreichend schweren Fehler, um NASM zu verweigern, eine Ausgabedatei zu erzeugen. Diese Bedingungen werden wie Fehler gemeldet, aber kommen mit dem Wort Warnung vor der Nachricht. Warnungen verhindern nicht, dass NASM eine Ausgabedatei generiert und einen Erfolgsstatus an das Betriebssystem zurückgibt. Manche Bedingungen sind sogar noch weniger schwerwiegend: Sie sind für den Anwender nur manchmal erwähnenswert. Daher unterstützt NASM die Befehlszeilenoption - w, die bestimmte Warnklassen der Assembly aktiviert oder deaktiviert. Solche Warnklassen werden durch einen Namen beschrieben, zum Beispiel orphan-labels können Sie Warnungen dieser Klasse durch die Befehlszeilenoption - worphan-labels aktivieren und durch - w-orphan-labels deaktivieren. Die unterdrückbaren Warnklassen sind: macro-params deckt Warnungen auf mehrzeilige Makros ab, die mit der falschen Anzahl von Parametern aufgerufen werden. Diese Warnklasse ist standardmäßig aktiviert, siehe Abschnitt 4.2.1 für ein Beispiel, warum Sie es deaktivieren möchten. Orphan-labels deckt Warnungen über Source-Zeilen ab, die keine Anweisung enthalten, aber ein Label ohne einen Doppelpunkt definieren. NASM warnt nicht über diese etwas obskure Bedingung standardmäßig siehe Abschnitt 3.1 für ein Beispiel, warum Sie es wollen. Zahl-Überlauf deckt Warnungen über numerische Konstanten ab, die nicht in 32 Bits passen (zB sein einfaches, ein zu viele Fs zu geben und aus Versehen 0x7ffffffff zu produzieren). Diese Warnklasse ist standardmäßig aktiviert. Wenn Sie eine Umgebungsvariable namens NASM definieren. Wird das Programm es als eine Liste von zusätzlichen Befehlszeilenoptionen interpretieren, die vor der eigentlichen Befehlszeile verarbeitet werden. Sie können damit Standard-Suchverzeichnisse für Include-Dateien definieren, indem Sie - i-Optionen in der NASM-Variablen setzen. Der Wert der Variablen wird im Leerraum aufgeteilt, so dass der Wert - s - ic: nasmlib als zwei separate Optionen behandelt wird. Allerdings bedeutet dies, dass der Wert - dNAMEmy-Name nicht tun, was Sie wollen, denn es wird an der Stelle aufgeteilt werden und die NASM-Befehlszeilenverarbeitung wird durch die beiden unsinnigen Worte - dNAMEmy und Name verwechselt werden. Um dies zu umgehen, bietet NASM eine Funktion, bei der NASM dieses Zeichen als Trennzeichen für Optionen behandelt, wenn Sie die NASM-Umgebungsvariable mit einem Zeichen beginnen, das kein Minuszeichen ist. Die Einstellung der NASM-Variablen auf den Wert - s-ic: nasmlib entspricht der Einstellung von - s - ic: nasmlib. Aber - dNAMEmy-Name wird funktionieren. Wenn Sie zum Schreiben von Programmen mit MASM oder TASM im MASM-kompatiblen Modus (nicht ideal) oder mit a86 verwendet werden. Versucht dieser Abschnitt, die großen Unterschiede zwischen MASMs-Syntax und NASMs zu skizzieren. Wenn Sie nicht bereits MASM verwendet haben, ist es wahrscheinlich sinnvoll, diesen Abschnitt zu überspringen. Ein einfacher Unterschied ist, dass NASM Groß-und Kleinschreibung ist. Es macht einen Unterschied, ob Sie Ihr Etikett foo anrufen. Foo oder FOO. Wenn Sie in DOS - oder OS / 2-.OBJ-Dateien zusammenbauen, können Sie die UPPERCASE-Direktive (dokumentiert in Abschnitt 6.2) aufrufen, um sicherzustellen, dass alle Symbole, die in andere Codemodule exportiert werden, NASM unterscheidet zwischen Etiketten unterscheiden sich nur im Fall. NASM wurde mit Einfachheit der Syntax im Auge entworfen. Eines der Entwurfsziele von NASM ist, dass es möglich sein sollte, so weit wie praktisch, für den Benutzer, eine einzelne Zeile des NASM-Codes zu betrachten und zu sagen, was Opcode von ihm erzeugt wird. Sie können dies nicht in MASM tun: Wenn Sie zum Beispiel deklarieren, dann die beiden Zeilen Code generieren völlig unterschiedliche Opcodes, obwohl identisch aussehende Syntaxen. NASM vermeidet diese unerwünschte Situation durch eine viel einfachere Syntax für Speicherreferenzen. Die Regel ist einfach, dass jeder Zugriff auf den Inhalt einer Speicherstelle erfordert eckige Klammern um die Adresse, und jeder Zugriff auf die Adresse einer Variablen doesnt. So bezeichnet eine Anweisung der Form mov ax, foo immer eine Kompilierzeitkonstante, sei es ein EQU oder die Adresse einer Variablen und der Zugriff auf den Inhalt der Variablenleiste. Müssen Sie mov ax, bar. Dies bedeutet auch, dass NASM keine Notwendigkeit für MASMs OFFSET-Schlüsselwort, da der MASM-Code ax, Balken bedeutet genau das gleiche wie NASMs mov ax, bar. Wenn Sie versuchen, große Mengen an MASM-Code zu erhalten, um sinnvoll unter NASM zusammenzubauen, können Sie immer idefine Offset, um die Präprozessor behandeln das OFFSET-Schlüsselwort als No-op. Dieses Problem ist in a86 noch verwirrend. Wobei das Deklarieren eines Labels mit einem nachfolgenden Doppelpunkt es als ein Label im Gegensatz zu einer Variablen definiert und bewirkt, dass a86 NASM-artige Semantik so in a86 übernimmt. Mov ax, var hat ein unterschiedliches Verhalten, abhängig davon, ob var als var: dw 0 (a label) oder var dw 0 (eine Wortgrößenvariable) deklariert wurde. NASM ist sehr einfach im Vergleich: alles ist ein Label. NASM unterstützt aus Gründen der Einfachheit auch nicht die hybriden Syntaxen, die von MASM und seinen Klonen wie mov ax, tablebx unterstützt werden. Wobei eine Speicherreferenz durch einen Abschnitt außerhalb der eckigen Klammern und einen anderen Teil im Inneren bezeichnet wird. Die richtige Syntax für die oben genannten ist mov ax, tablebx. Ebenso, mov ax, es: di ist falsch und mov ax, es: di ist richtig. NASM entscheidet sich nach Design, sich nicht an die Variablenarten zu erinnern, die Sie deklarieren. Wohingegen MASM sich erinnern wird, wenn Sie var dw 0 sehen, dass Sie var als Wortgrößenvariable deklariert haben und dann in der Lage sein werden, die Mehrdeutigkeit in der Größe des Befehls mov var, 2 auszufüllen. NASM wird sich bewusst nicht mehr über das Symbol var erinnern, außer wo es beginnt, und so müssen Sie explizit Code mov var schreiben, 2. Aus diesem Grund unterstützt NASM nicht die LODS. Bewegungen STOS. SCAS. CMPS. INS. Oder OUTS-Anweisungen, sondern unterstützt nur die Formulare wie LODSB. MOVSW. Und SCASD. Die explizit die Größe der Komponenten der zu manipulierenden Strings angeben. Als Teil der NASMs fahren für die Einfachheit, es unterstützt auch nicht die ASSUME-Richtlinie. NASM wird nicht im Auge behalten, welche Werte Sie in Ihren Segmentregistern setzen und wird nie automatisch ein Segmentüberschreiben-Präfix generieren. NASM hat auch keine Anweisungen, um verschiedene 16-Bit-Speichermodelle zu unterstützen. Der Programmierer muss nachvollziehen, welche Funktionen mit einem Weitruf aufgerufen werden sollen und welcher mit einem Nahruf verknüpft ist und für die richtige Form der RET-Anweisung verantwortlich ist (RETN oder RETF NASM akzeptiert RET selbst als alternative Form für RETN ) Darüber hinaus ist der Programmierer für die Codierung von CALL FAR-Befehlen, die bei Aufruf externer Funktionen erforderlich sind, verantwortlich und muss auch verfolgen, welche externen Variablendefinitionen weit sind und welche nahe sind. NASM verwendet unterschiedliche Namen, um auf Gleitkommaregister von MASM zu verweisen: wo MASM sie ST (0) nennen würde. ST (1) und so weiter, und a86 würde sie einfach 0. 1 nennen und so weiter, NASM wählt, sie st0 zu nennen. St1 etc. Ab der Version 0.96 behandelt NASM nun die Anweisungen mit nowait-Formularen genauso wie MASM-kompatible Assemblers. Die idiosynkratische Behandlung von 0,95 und früher beruht auf einem Missverständnis der Autoren. Aus historischen Gründen verwendet NASM das Schlüsselwort TWORD, wobei MASM und kompatible Assemblierer TBYTE verwenden. NASM deklariert nicht uninitialisiert Speicher in der gleichen Weise wie MASM: wo ein MASM-Programmierer verwenden könnte Stapel db 64 dup (). NASM erfordert Stapel resb 64. soll als Reserve 64 Byte gelesen werden. Für eine begrenzte Menge an Kompatibilität, da NASM behandelt. Als ein gültiges Zeichen in Symbolnamen können Sie Code. Equ 0 und dann schreiben dw. Wird zumindest etwas vage nützlich. DUP ist jedoch noch keine unterstützte Syntax. Darüber hinaus funktionieren Makros und Richtlinien völlig anders als MASM. Siehe Kapitel 4 und Kapitel 5 für weitere Details. Der Netwide Assembler: NASM Um eine Datei zusammenzustellen, geben Sie einen Befehl des Formulars wird myfile. asm in eine ELF-Objektdatei myfile. o zusammenbauen. Und wird myfile. asm in eine rohe Binärdatei myfile. Um eine Auflistungsdatei zu erzeugen, wobei die Hex-Codes, die von NASM ausgegeben werden, auf der linken Seite der Originalquellen angezeigt werden, verwenden Sie die Option - l, um beispielsweise einen Auflistungs-Dateinamen anzugeben: Um weitere Verwendungshinweise von NASM zu erhalten, Liste der verfügbaren Ausgabedateiformate und was sie sind. Wenn Sie Linux aber arent sicher, ob Ihr System ist a. out oder ELF. (In dem Verzeichnis, in dem Sie die NASM-Binärdatei, wenn Sie es installiert). Wenn es so etwas sagt, dann ist dein System ELF. Und Sie sollten die Option - f elf verwenden, wenn NASM Linux-Objektdateien erzeugen soll. Wenn es sagt oder etwas ähnliches, ist Ihr System a. out. Und Sie sollten - f aout verwenden (Linux a. out Systeme sind seit langem veraltet und sind selten in diesen Tagen.) Wie Unix-Compiler und Assemblern, ist NASM schweigen, es sei denn, es schief geht: Sie sehen keine Ausgabe überhaupt, es sei denn, es Gibt Fehlermeldungen. NASM wird in der Regel wählen Sie den Namen Ihrer Ausgabedatei für Sie genau, wie es dies abhängig von der Objekt-Dateiformat ist. Für Microsoft-Objekt-Dateiformate (obj und win32) entfernt es die. asm-Erweiterung (oder was auch immer die Erweiterung, die Sie verwenden möchten - NASM doesnt care) aus Ihrem Quelldateinamen und ersetzen. obj. Für Unix-Objekt-Dateiformate (aout. Coff. Elf und as86) ersetzt es. o. Für rdf. Wird es. rdf verwenden. Z. B.

No comments:

Post a Comment