arg_4 rückwertsrechnen..
-
Ich nehme IDA Free um mir eine Übersicht mit Diagramme zubekommen. Mit Windbg verbinde ich mich Win 7. Dann setzte meine breakpoint´s und lese die Werte aus. Hat bisher gut geklappt.
Ein ASM Buch habe ich gelesen und zu 90 % verstanden. Über die Eckige Klammer habe ich nichts gefunden. Google sagt, das hat mit dem Intel Sytax zu tun.
Nach IDA Free wird:
arg_4= dword ptr 0Ch
zugeordnet. Ich will vom Prinzip her wissen welche Werte die Funkiton bekommt, bzw Parameter.
Befehle wie mov push sub... sind mir klar, notfalls kann ich die Nachschlagen.Gerade habe ich ein Video mit Dereferenzierung angeschaut.
Jetzt wurde mir Das Thema Zeiger klarer.
-
@tomycat2009 sagte in arg_4 rückwertsrechnen..:
Ich will vom Prinzip her wissen welche Werte die Funkiton bekommt
Dann schau auf den Stack. SP-4, SP-8, SP-12 ... Dein
arg_4
liegt bei SP-0x0c (SP-12), aber das habe ich Dir im anderen Thread schon gesagt.
-
@tomycat2009 sagte in arg_4 rückwertsrechnen..:
Ein ASM Buch habe ich gelesen und zu 90 % verstanden. Über die Eckige Klammer habe ich nichts gefunden. Google sagt, das hat mit dem Intel Sytax zu tun.
Das Buch benutzt doch sicher auch Intel-Syntax? Wie dem auch sei, wenn du 90% von dem Buch verstanden hast, hast du auch indirekte Adressierung verstanden. Oder es ist ein seeeeeehr schlechtes Buch.
Nach IDA Free wird:
arg_4= dword ptr 0ChWunderbar, Frage beantwortet.
zugeordnet. Ich will vom Prinzip her wissen welche Werte die Funkiton bekommt, bzw Parameter.
Hier muss ich Swordfish widersprechen. Du musst an der Speicherstelle, die durch
ebp+0x0c
adressiert wird, nachgucken.Wobei es da viele Konventionen gibt... es kann auch
rbp
sein in 64-bit Code, es kann auch tatsächlich über den Stackpointeresp
gehen. Weiß man nicht. Hier steht im Programm vielleicht irgendwo tatsächlich ein Zugriff auf[ebp+0x0c]
, und deshalb rät IDA, dass das ein Argument ist. Ich weiß nicht, wie es das macht.Gerade habe ich ein Video mit Dereferenzierung angeschaut.
Jetzt wurde mir Das Thema Zeiger klarer.Hmja, kann nicht schaden ein bisschen was von C zu verstehen.
-
@Bashar sagte in arg_4 rückwertsrechnen..:
Hier muss ich Swordfish widersprechen. Du musst an der Speicherstelle, die durch ebp+0x0c adressiert wird, nachgucken.
Ich meinte den Wert von
arg_4
selbst, nicht das was dann durch [ebp+arg_4] adressiert wird.
-
Versteh ich nicht. Der Wert von
arg_4
ist0x0C
, wozu das mit demSP
, was hatSP-0x0C
damit zu tun?
-
@Bashar Dann habe ich IDA und die Anzeige falsch verstanden. Kann auch gut sein.
-
Es kann ja auch sein, dass ich es falsch verstehe, ich kenn ja IDA nicht näher, allerdings ergibt es doch auch nur so Sinn, oder?
-
thx all,
ok klingt ihrgendwie logisch,
Im ersten Block der Funktion wird als erstes...arg_0 dword ptr 8
arg_4 dword ptr 0Ch
arg_8 dword ptr 10h... angelegt, sprich einfach auf den Stafel geschissen. mit esp -0Ch sehe ich arg_4. usw
Aber die Klammer macht mir noch Kummer
mov esi, [ebp+arg_4]Zitat aus Assembler Lowlevel:
Speicherzugriffe werden mit eckigen Klammern angedeutet. <asm>mov ax, [ebp] ; lädt ein word (2 Byte Zahl) von der Adresse in ebp nach ax
Zitat Endeebp Adresse + arg_4 Adresse wird Addiert?! ähhh Das macht doch keinen Sinn?
-
@tomycat2009 sagte in arg_4 rückwertsrechnen..:
ebp Adresse + arg_4 Adresse wird Addiert?! ähhh Das macht doch keinen Sinn?
Stell dir vor, du hast dein Lager ("Basislager") im Wald bei der 17. Tanne aufgeschlagen. Deine Freundin wohnt eine Tanne weiter, Tanne 18 - und ihre Eltern wohnen noch ein Tanne weiter, also an der 19. Tanne. Eines Tages beschließt ihr umzuziehen, aber eure generelle Wohnsituation soll gleich bleiben, d.h. deine Freundin soll weiterhin 1 Tanne weiter entfernt wohnen und ihre Eltern noch eine Tanne weiter weg.
Wenn nun Fremde die Eltern deiner Freundin besuchen wollen, müssen sie erst wissen, wo du dein Basislager aufgeschlagen hast und dann einfach 2 Tannen weiter gehen.
So ist das hier auch. Bei jedem Funktionsaufruf verlegt ihr das Basislager. Aber die Distanz untereinander bleibt gleich. arg_Freundin=1 ist einfach nur die Distanz vom "Basislager" ebp zu deiner Freundin und arg_Eltern_der_Freundin=2 ist auch fest. Daher sind die Arg_x-Zahlen hier auch so klein, die Daten liegen nur "etwas" neben dem Basislager, welches selbst "irgendwo" im Wald liegt.Dein Ursprungsvorhaben scheitert, weil du nun aus den Eigenschaften deiner Freundin (wie z.B. Haarfarbe) und der Lagerposition die Distanz zu dir berechnen willst. Die Distanz hat damit aber nichts zu tun.
PS: mal einen Waldvergleich gewählt, da Autovergleiche ja immer hinken
-
thx,
[ebp + arg_4] ist gleichzusetzen mit [ebp + 4], wenn die arg_4 4 Byte groß ist. Es geht nur um den Speicherort, mehr nicht? Ist das so, dann habe ich es verstanden. :--)
-
@tomycat2009 sagte in arg_4 rückwertsrechnen..:
[ebp + arg_4] ist gleichzusetzen mit [ebp + 4], wenn die arg_4 4 Byte groß ist. Es geht nur um den Speicherort, mehr nicht? Ist das so, dann habe ich es verstanden. :--)
Naja, es ist gleichzusetzen mit
[ebp+12]
, weil 12 bzw.0x0C
nunmal der Wert vonarg_4
ist. Die Größe stammt aus demdword ptr
und ... die Größe ist etwas anderers als der Speicherort.
-
Dieser Beitrag wurde gelöscht!
-
Dieser Beitrag wurde gelöscht!
-
Dieser Beitrag wurde gelöscht!