Problem beim debuggen von Solitär

04/16/2007 15:59 triris#1
So, der übung halber debugge ich im Moment ab und an Programme und suche irgendwelche Variablen raus und probiere die Adresse dazu zu finden. Bei Solitär probiere ich das gerade mit den Punkten.
Also ich habe über tsearch die adresse natürlich gefunden. Habe dann das ganze über ollydbg gesucht breakpoint gesetzt und auch den dazu passenden asm code gefunden :) Jetzt kommt das problem, meine asm kenntnisse sind doch sehr begrenzt. Screen ist im Anhang.
Die start Adresse ist markiert, von da aus gehts weiter in der Zeile
010030A7 wo ESI mit EPB + 8 beschrieben wird.
Dann geht's weiter in Zeile 01003070 (wieder markiert).
MOV EBP,ESP hierbei habe ich jetzt vermutet das EBP mit ESP beschrieben wird. Nur leider finde ich jetzt ESP nicht. Zumindest nicht in den nächsten 25 Zeile etwa darüber =/

Bitte um Hilfe :(

~triris

PS: suche btw ein kleines ASM tut um mir vlt doch etwas die Grundlagen anzueignen ^_^
04/16/2007 16:31 neji#2
Mal abgesehen dass die Adresse in diesem Fall statisch ist und du generell immer nach 0xAA040 schreiben kannst :

Du hast die Adresse wo die Punkte stehen, in dem Fall in 0xAA040 und weisst dass [esi+0x30] die Adresse ist, dann müsstest du bloß 0xAA040 - 0x30 rechnen.....

esi ist also 0xAA010 bzw 696336 und steht in diesem Fall an 3 Stellen :

7FDBC
7FDE4
1007170
04/16/2007 16:36 rEdoX#3
ESP ist der stackpointer, er wird durch push's/pop's veraendert.

Es koennte sein, dass im stack gerade die parameter der funktion(0x100306F) stehen.

[Only registered and activated users can see links. Click Here To Register...]

lg
04/16/2007 18:32 triris#4
Danke euch beiden für die schnellen Antworten :)
Also wenn eine Variable mehrmals den gleichen Speicher belegt ist sie auf jeden Fall statisch? Kann kein Zufall sein?
04/17/2007 08:43 neji#5
doch kann auch Zufall sein....mit einer Chance von 1:100000 oder so :)

Also im ernst, wenn dein Pointer nach einem Neustart des Spiels immer noch der gleiche ist, dann kannste davon ausgehen, dass die Adresse statisch ist.
04/17/2007 18:25 triris#6
Danke dir :)

#edit 100. Post :cool:
04/18/2007 02:39 wiz#7
Die ersten zwei Zeilen sind Standard-Code, ignorieren, vergessen, was du magst. Der Compiler bereitet bei einem Funktionsaufruf immer den Stack für die aufgerufene Funktion auf, beginnt also immer mit dem Sichern vom Original-Basepointer (BP), esp verschieben, Funktion ausführen, Original-BP herstellen (pop ebp). Das wirst du bei vermutlich jeder Funktion finden und ist nichts, worüber du dir Sorgen machen musst.

Edit: Wurde jetzt nicht direkt gefragt, aber man kann sich schon darüber wundern:

Code:
xor eax,eax
Der Code gibt, wenn man drüber nachdenkt immer Null. D.h. also: Wird das irgendwo aufgerufen, wird ein Register auf 0 gesetzt. Wieso aber xor und nicht mov register,0? Tatsächlich ist es so, dass das xor schneller ist, als das mov und somit übersetzt ein Compiler ein xor draus. Ganz simpel.
04/18/2007 08:33 neji#8
xor macht nichts anderes als ein gegebenes Bit umdrehen
wenn auf beiden Seiten der Gleiche Wert steht, dann werden alle Bits, die 1 sind, umgekehrt und es kommt logischerweise 0 dabei raus.
04/22/2007 01:49 Busti#9
Quote:
Originally posted by neji@Apr 18 2007, 08:33
xor macht nichts anderes als ein gegebenes Bit umdrehen
wenn auf beiden Seiten der Gleiche Wert steht, dann werden alle Bits, die 1 sind, umgekehrt und es kommt logischerweise 0 dabei raus.
1010010 -> 0101101

oder?
04/22/2007 02:07 wiz#10
xor nimmt als Operator zwei Argumente!
Abweichungen der Bits werden zu einer eins, gleiches zu einer 0.

101 xor 100 -> 001
05/23/2007 19:33 l8rdude#11
Die 2 Zeilen am Anfang der Routine gelten nur der Initialisierung d. Stacks, da gibts an sich nicht viel rumzufuschen. Schau lieber in den Code, wo die Routine aufgerufen wird (STRG+F9 drüclen oder so, damir du zum RETN kommst (Till Return auf jedenfalls) - hab Olly lange nicht mehr benutzt) und durchforste den Code.