Autor Beitrag
NewMori
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45
Erhaltene Danke: 1



BeitragVerfasst: Do 13.05.10 14:43 
Hallo,
das ist mein erster Beitrag hier, deshalb hoffe ich, dass ich das richtige Forum gewählt habe. Es geht darum, dass ich in Delphi über Assembler eine Methode mittels jmp aufrufe. Jetzt weis ich allerdings nicht wo die Methode hinspringt, wenn sie beendet wird, ich habe vorher auf den Stack die Rücksprung-Adresse geschrieben (da es eine andere Adresse als die aufrufende Stelle ist). Meine Frage ist jetzt: Nutzt Delphi die Adresse auf dem Stack, oder muss ich es in die Adresse eines Registers, etc. schreiben?


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 13.05.2010 um 14:53
Moderiert von user profile iconNarses: Titel geändert.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 13.05.10 15:07 
Hallo und :welcome:

Am Ende einer Methode in Delphi steht ein ret, mit dem an die auf dem Stack hinterlegte Rücksprungadresse zurückgesprungen wird. Wenn diese dort also korrekt hinterlegt ist, dann springt das Programm auch dorthin.
NewMori Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45
Erhaltene Danke: 1



BeitragVerfasst: Do 13.05.10 15:11 
Vielen Dank jaenicke,
das was was ich gesucht habe, da ich nicht mehr wusste wo die Rücksprungadresse gespeichert wird, wusste ich nicht ob Delphi nicht doch ihrgendwo anders einen anderen Eintrag mit der Sprungadresse anlegt.

_________________
Es ist keine Kunst in ein Programm 20 Fehler zu schreiben. Die Kunst ist es das Programm dann noch zum laufen zu bekommen.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 13.05.10 17:44 
Je nach Aufruf-Konvention kann das Layout der Daten auf dem Stack etwas variieren. Insbesondere was die Stelle der Parameter und der Rücksprungadresse angeht. Für die register-Direktive (Standard bei Delphi) hat man zumindest erst die Argumente, dann die Rücksprungadresse, dann den Pointer für's Stackframe und dann lokale Variablen. Wenn Du also innerhalb einer anderen Methode bist, musst du deren Stack-Layout auch mit beachten.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.


Zuletzt bearbeitet von BenBE am Do 13.05.10 20:07, insgesamt 1-mal bearbeitet
NewMori Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45
Erhaltene Danke: 1



BeitragVerfasst: Do 13.05.10 20:03 
@BenBE: Das wusste ich, aber Danke trotzdem. Du sagtest Parameter auf dem Stack, ich habe gelesen, das die ersten drei Parameter mit EAX,EBX und ECX übergeben werden und dann erst auf den Stack geladen wird.

_________________
Es ist keine Kunst in ein Programm 20 Fehler zu schreiben. Die Kunst ist es das Programm dann noch zum laufen zu bekommen.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 13.05.10 20:07 
Wo Parameter übergeben werden hängt wie gesagt von der Aufrufkonvention ab.

Die ersten 3 wären aber trotzdem eher in EAX, EDX, ECX zu finden. Zumindest für register.
Bei stdcall und cdecl wird z.B. alles über den Stack abgewickelt, wobei man dann noch die Reihenfolge der Übergabe beachten muss.

EBX hat, genauso wie ESI und EDI, eine andere Aufgabe.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
NewMori Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45
Erhaltene Danke: 1



BeitragVerfasst: Do 13.05.10 20:12 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Die ersten 3 wären aber trotzdem eher in EAX, EDX, ECX zu finden.

Ich wusste das ihrgendwas falsch war :oops:. Jetzt hab ichs endlich richtig hinbekommen.

_________________
Es ist keine Kunst in ein Programm 20 Fehler zu schreiben. Die Kunst ist es das Programm dann noch zum laufen zu bekommen.