[Gelöst] Verständnis Frage zu JNZ

Hallo,
ich habe mir gerade ein kleines Crackme in C geschrieben. Mir ist auch ganz klar die stelle an der ich patchen muss aber auch genau an der Stelle habe ich ein Problem.

Ich überprüfe den eingelesenen string mit strcmp auf den hartgecodetet string und dort ist dann ein JNZ. Wenn er spring ist das pw ungleich also falsch und wenn er nicht spring ist es richtig.

Also müsste meiner meinung nach das Zero Flag bei falscher Eingabe auf 1 sein weil Jump NOT Zero (springe wenn nicht null). Das will mir nicht klar werden =/ es müsste meiner meinung nach genau andersrumm sein!

Schaut euch einfach mal den Screenshoot an. Hoffe ich könnt mir das erklären.
 
Damit ein JNZ springt, darf das Zero-Flag nicht gesetzt sein, daher "jump if not zero". Es muss also gleich 0 sein.
Da "test eax,eax" ja nur eax mit sich selbst AND-verknüpft(und nur die Flags entsprechend setzt) ist das Zero-Flag nur 0, wenn strcmp 0 zurückgibt, was nur bei gleichen Strings der Fall ist.
In deinem Beispiel:
test eax,eax ; in eax ist eine 1 -> 1 & 1 = 1, also ist das Zero-Flag nicht gesetzt und "Right" wird übersprungen
 
Arg jetzt hab ichs verstanden danke das Zero flag sagt ja wenn es auf 0 ist das der wert nicht 0 ist da hatte ich gerade den Dreher drinne..danke!
 
Zurück
Oben