Was registriert hat strcmp bewerten? x86 Assembly
Wie es scheint, dies ist allgemein bekannt, aber ich kann nicht finden, es geschrieben auf dem internet (noch).
Wenn ein Programm hat
call <JMP.&msvcrt.strcmp>
welche Werte werden verglichen? Ich bin mir nicht sicher, weil mit cmp ist es erklärt (cmp eax, ebp).
Ich weiß, das Ergebnis des Vergleichs ist wieder in das EAX-register, falls das hilft.
- 'call' übergibt die Steuerung an die Adresse der Bibliothek-routine, strcmp, das ist nicht eine intrinsische Montageanleitung (wie cmp). Daher wird der Wert zurückgegeben / im Vergleich hängt die Funktion Unterschrift/Sprache, Aufruf-Konvention, etc. Es sei denn, du bist gut in reverse-engineering, würden Sie wahrscheinlich haben, um den ursprünglichen Prototyp der Funktion, die Staaten, wo/wie/welche Argumente übergeben werden.
- Ich aktualisiert meine Frage nach einem Blick auf es in einem anderen debugger. Es msvcrt s strcmp
- Für standard-Aufrufkonventionen der x86 -, Argumente schob den Stapel vor dem aufrufen der Funktion. Auf x64, einige Argumente können in Registern übergeben werden, statt. Immideately vor, Sie sollten sehen, einige Anweisungen drücken-Register auf dem stack, im Fall von x86, oder einige Bewegung in den Registern für x64 (kann schwieriger sein, zu sehen). Wieder, Sie kann nicht richtig identifizieren, welche Werte verwendet werden, und, wie, ohne die genaue Funktion Signatur und system-Architektur. Und selbst dann kann der compiler optimieren, aber es fühlt sich.
- Ich sehe die Werte gedrückt, um den stack jetzt, danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie versuchen, zu verknüpfen
strcmp
mit der Montageanleitungcmp
. Aber Sie sind verschiedene Dinge. In der Prozessor-Ebene (assembly), diecmp A, B
vergleicht 2 verschiedene Register, zum Beispiel, und setzen Sie das Ergebnis in einigen Fahnen. Flags sind bits, die getestet werden können, die von anderen Anweisungen (wiejz
,jnz
) und dann umleiten den Fluss entsprechend der gewünschten Absicht.Wenn Sie eine
call strcmp
Sie tatsächlich den Aufruf einer "high-level-Funktion" (hohen Niveau, wenn auch im Vergleich zu Montage -), die ausgeführt wird, eine Menge Zeug zu vergleichen 2 C-Style strings. Es ist nicht leicht zu wissen, welche Register verwendet werden (viele von Ihnen werden vermutlich), sobald jeder compiler/platform geben wird eine andere Folge von computeranweisungen.Und wenn Sie dies verstehen, werden Sie sehen, dass es egal ist, in der Tat, denn das Paradigma ist ein wenig anders:
cmp
ist einer Montageanleitung.strcmp
ist keine Einbauanleitung, sondern eine Funktion.