Erstens haben Register keine Adressen. Jede Anweisung in einer beliebigen Assembler-Sprache wird in einen Opcode übersetzt. Opcodes in x86 können ein, zwei, drei oder sogar mehr Bytes sein (in einigen anderen Prozessoren sind sie "Festbreite"). Normalerweise identifiziert der Opcode den Befehl, den Adressierungsmodus und die beteiligten Register. Der "Adressierungsmodus" bestimmt, ob mehr als der Opcode von der CPU benötigt wird, dh der "unmittelbare" Adressierungsmodus bedeutet, dass unmittelbar nach (oder "unmittelbar nach") der Anweisung für diese Anweisung zusätzliche Daten vorhanden sind - "absolute" Adressierungsmodi bedeuten, dass a Die Speicheradresse folgt der Anweisung und wird von dieser Anweisung verwendet.
Sie können den Opcode von etwas Ähnlichem herausfinden MOV AL,SP
und danach suchen. x86 hat viele Anweisungen, die den Stapelzeiger bearbeiten.
Aber bitte, bitte beenden Sie den Editor verwenden und ein Hex - Editor stattdessen verwenden. Ich würde HxD empfehlen, obwohl es viele andere gibt.
Und @David Schwartz ist richtig. Ein Disassembler durchläuft eine Datei und übersetzt Opcodes zurück in lesbaren Text. Was Sie tun möchten, ist absolut möglich.
Allerdings müssen Sie wissen, wo in der Datei der Anweisungen beginnen, denn wenn man an der falschen Adresse beginnen, einige Daten, die die „Operanden“ auf OP - Codes (wie Anweisungen, die eine Adresse für einen Operanden oder „Argument“ nehmen) sein sollten, könnten als Opcodes falsch interpretiert werden. Um dies zu wissen, muss das Format der ausführbaren Datei bekannt sein. Dies ist für Windows das "Portable Executable" - oder PE-Format (und für Linux-Systeme häufig ELF). Ich bin sicher, dass es Disassembler gibt, die PE usw. verstehen, aber ich kenne keine Nebenprodukte.