3 fragen: Buffer db 7fh dup (0), dd und test eax, eax ?
-
hi
bin neu in assembler. ich hab jetzt einen code gefunden, der daten aus der registry ausließt. (also windows...
)
drei sachen versteh ich nicht:
1. im data-segment:Buffer db 7fh dup (0)
was bedeutet ganz genau "7fh dup (0)" ?
2. neben db gibts noch dd. was das bedeutet muss ich irgendwie überlesen ham.
wenn ich das richtig interpretiere, ist db ein pointer un dd nicht. wie ist das ?
3. und dann noch:
test eax, eax jnz WeFailed
was macht test ? wenn danach jnz kommt, müsste das ja sowas wie cmp sein, aber was für einen sinn macht es dann, eax mit eax zu vergleichen ? oder is das so ne art eax = (bool)(eax); ?
schon mal großes dankeschön im vor*aus.
lw
-
Lawilog schrieb:
1. im data-segment:
Buffer db 7fh dup (0)
was bedeutet ganz genau "7fh dup (0)" ?
Das Definiert Bytes (db) und zwar 7f-Hex (also 127) mal die 0 afair.
2. neben db gibts noch dd. was das bedeutet muss ich irgendwie überlesen ham.
wenn ich das richtig interpretiere, ist db ein pointer un dd nicht. wie ist das ?
dd sollte anstatt Bytes einfach 32-Bit-Werte produzieren.
[@uote]3. und dann noch:
test eax, eax jnz WeFailed
was macht test ? wenn danach jnz kommt, müsste das ja sowas wie cmp sein, aber was für einen sinn macht es dann, eax mit eax zu vergleichen ? oder is das so ne art eax = (bool)(eax); ?
[/quote]
test ist genau wie ein or, nur dass das Ergebnis nicht gespeichert wird, sondern weggeschmissen. Wenn man nun eax auf Null testen will, könnte man cmp eax, 0 oder so ähnlich versuchen und dann jne nehmen. Anstatt dessen kann man auch test eax, eax nehmen. Dann wird eax mit sich selbst verodert, das Ergebnis ist also eax selber. Dann werden die Flags anhand des Ergebnisses gesetzt, das Ergebnis danach verworfen. War eax nun schon vorher Null, dann ist das Zeroflag gesetzt. jnz spring dann weg, wenn eax nicht Null war.
-
"TEST" ist wie ein "AND" ohne das ergebnis zu speichern =p
-
wasiliy schrieb:
"TEST" ist wie ein "AND" ohne das ergebnis zu speichern =p
Ach...vernachlässigbare Details