x86 - C sscanf-Funktion

Also ich habe das folgende code-segment in x86 Assembler:

mov $0x0, %eax
callq  400ac8 <__isoc99_sscanf@plt>
cmp    $0x5,%eax
jg     40152d <this_function+0x3d>   -----> jumps to add two lines down
callq  4014b a <error_program>
add    $0x18,%rsp
retq

Nun in der ersten Zeile, es legt fest, %eax als null. Es ruft dann sscanf und dann überprüft, ob %eax 5. Wenn es größer als 5 ist, wird es weiterhin anders zu beenden. Also ein einfaches C-code, die ich gemacht habe:

eax = 0;
sscanf();
if (eax < 5) error_program();
return;

Dies ist ein Objekt-dump einer Binär-Datei, damit ich sicher bin, dass es richtig ist. Jedoch, eax wird immer null sein, und der Fehler wird Feuer. Bin ich richtig auf? Oder ist es möglich, dass sscanf würde manipulieren eax?

Dank

  • Das ergibt keinen Sinn, obwohl - das Programm wird nicht beendet jede und jeder einzelne Zeit..
  • Ich bin verwirrt genug durch das, was Sie hier haben, dass ich denke, Sie sollten wahrscheinlich mehr umliegenden code, aufrufen Beispiel, usw. (Ich löschte meinen ersten Kommentar, da im Nachhinein scheint es nicht nützlich genug.)
  • "Das ist ein Objekt-dump einer Binär-Datei, damit ich sicher bin, dass es richtig ist." ein statisches disassembler, der einen linearen sweep kann leicht getäuscht werden
InformationsquelleAutor darksky | 2012-01-23
Schreibe einen Kommentar