Heyho Community,
ich bin derzeit dran ein CrackMe zu lösen und bin auf folgende Zeilen im Debugger gestoßen, die ich mal kommentiert habe, so wie ich sie verstehe:
So nun zu meinem Problem: Wenn das Byte 30h ist, dann wird die Subtraktion das Zero-Flag setzen. Aber nach dem Inkrementieren wird das Zero-Flag aber auf 0 gesetzt! In der Dokumentation des 8086 steht aber ausdrücklich, dass INC keine Auswirkungen auf die Flags hat. Wieso wird das Zero-Flag denn trz auf 0 gesetzt?!
Liebe Grüße
ich bin derzeit dran ein CrackMe zu lösen und bin auf folgende Zeilen im Debugger gestoßen, die ich mal kommentiert habe, so wie ich sie verstehe:
Quellcode
- MOVZX EAX,BYTE PTR DS:[ESI] ;Kopiere das Byte an stelle DS:[ESI] in das EAX-Register
- SUB EAX,30 ;Subtrahiere dem EAX-Register 30h (Wenn das Byte auch 30h war, dann setze das Zero-Flag)
- ADD EBX,EAX ;Addiere EBX das Ergebnis der Subtraktion
- SHL EBX,4 ;Multipliziere den Wert im EBX-Register mit 16
- INC ESI ;Erhöhre ESI um eins
- DEC EDX ;Ziehe EDX eins ab
- JNZ SHORT 004011D0 ;Wenn das Zero-Flag nicht gesetzt ist, dann springe]
So nun zu meinem Problem: Wenn das Byte 30h ist, dann wird die Subtraktion das Zero-Flag setzen. Aber nach dem Inkrementieren wird das Zero-Flag aber auf 0 gesetzt! In der Dokumentation des 8086 steht aber ausdrücklich, dass INC keine Auswirkungen auf die Flags hat. Wieso wird das Zero-Flag denn trz auf 0 gesetzt?!
Liebe Grüße
Wo viel kopiert wird, wird wenig kapiert.
Andreas Tenzer
(Dt. Philosoph, * 1954)
Andreas Tenzer
(Dt. Philosoph, * 1954)