Was bedeutet push dword ptr [eax+22] bedeuten?
Ich weiß, dass z.B. push eax speichern würde, eax auf dem stack und dekrementiert esp um 4. Und die push dword ptr bedeutet, es muss drücken 4 bytes, aber dann bin ich verwirrt. Auch wenn es [esi+22] dies wäre die gleiche Sache?
- Das war schnell, vielen Dank Kerrek. Könnte ich Fragen, ist es korrekt, dass nur auf der Grundlage, dass die Letzte Anweisung, die es gibt keinen Weg, der Leser würde wissen, ob es war, deutete auf ebp+ oder ebp- ?
- Sorry, ich verstehe nicht ganz die Frage - wer ist "es"? Was meinst du mit "reader"? Lesen des Quellcodes oder der Inspektion der stack?
- (Und bitte fügen Sie den Kommentar an die Antwort - auf diese Weise bekomme ich eine Benachrichtigung. Ich habe gerade passiert, um zu sehen, Ihren Kommentar zufällig diese Zeit. Oder fügen Sie die "@name " - marker.)
- Okay danke @KerrekSB weiß ich für das nächste mal. Der einfachste Weg, um zu beschreiben, meine Verwirrung ist mit ein Beispiel, wenn 'push DWORD [ebx + 42]' war 'push DWORD [EBP+42]' ich weiß, es wäre ein parameter, und wissen, wo Sie ist, wurde bei in dem Stapel. Während die, ohne zu wissen, den Wert in ebx gäbe es keine Möglichkeit zu wissen, seine Aufrechnung gegen ebp (ohne Prüfung der stack, nur dass die Zeile des Quellcodes. Ich hoffe, dass Sie nicht klingen wie eine dumme Frage, nur versuchen in meinen Kopf zu kriegen, Dank.
- Wenn
ebx
enthält den Anfang eines Arrays, möchten Sie vielleicht schieben einige andere array-element und müssen daher eine offset-Berechnung...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
push
Unterricht, viel wie viele andere x86-Anweisungen, können eine Vielzahl von Operanden: unmittelbare Werte, Register und Speicheradressen:Register form lässt sich die Größe aus der Größe der register. Die memory-form haben muss, um die angegebene Größe (z.B. hier gezeigt in Intel-syntax). Für unmittelbare Werte, die operand-Größe ist entweder 16 oder 32 bits; der aktuelle Modus ist "Standard", und die andere Größe können explizit ausgewählt werden (z.B.
push WORD 10
im 32-bit-Modus).push dword ptr [eax+22]
würde Dekrementesp
durch 4 und dann speichern 4bytes Daten aus dem Speicher Speicherortebx + 22
.und
pop eax
tun, in umgekehrter Weise, bewegen Sie zunächst die bits storeed inesp
zuesp + 3
zueax
und erhöhenesp
4.