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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es üblich, für Funktionen zu übergeben, der Rückgabewert zurück in eax; zumindest, es ist nicht garantiert, erhalten werden. Also, vielleicht ist dieser code überprüft, um sicherzustellen, dass sscanf ist zu finden, die mindestens 5 Elemente?
eax
auf 0 gesetzt ist, um anzuzeigen, dass es keine Argumente in den SSE-Registern.Kurze Antwort ist ja, sscanf wird auf jeden Fall ändern, %eax. %rax ist der Standard-register Funktionen legen Sie Ihre return-Wert in immer.
Habe ich einige der Forschung, und es sagt diese:
weitere Informationen finden Sie hier: http://www.cplusplus.com/reference/cstdio/sscanf/