Hallo Nukacola,
ich habe mich mit der Debbuging-API nich nicht beschäftigt. Aber möglicherweise musst du die Werte der Stackregister auslesen, und dann mit der Win-API von dieser Adresse deine Werte auslesen.
Grüße, Marwin
Von Win32 auf DOS Stack zugreifen
Moderatoren: crack, Krüsty, Marwin
Hallo Marwin,
danke für deine Antwort auch wenn du mir damit nicht helfen konntest.
Ich hab es jetzt hinbekommen. Man muss einfach mit Hilfe der Debug API sich an den DOS-Prozess (DOS-Fenster emuliert durch NTVDM.exe)anhängen. Dann einfach die API-funktionen SetThreadContext und GET und schon kann man den stack ändern. Als Classname für die DOS-Box sollte man im übrigen "ConsoleWindowsClass" benutzen. Bin aber noch auf der Arbeit und hab noch nicht getestet ob alles geht. Da ich schon kurz diese kleine test App
geschrieben habe. Irgendwann muss ich ja auch mal arbeiten.
So könnt ja mal sagen falls ihr irgendwelche fehler seht..
Greetings Nukacola
danke für deine Antwort auch wenn du mir damit nicht helfen konntest.
Ich hab es jetzt hinbekommen. Man muss einfach mit Hilfe der Debug API sich an den DOS-Prozess (DOS-Fenster emuliert durch NTVDM.exe)anhängen. Dann einfach die API-funktionen SetThreadContext und GET und schon kann man den stack ändern. Als Classname für die DOS-Box sollte man im übrigen "ConsoleWindowsClass" benutzen. Bin aber noch auf der Arbeit und hab noch nicht getestet ob alles geht. Da ich schon kurz diese kleine test App
geschrieben habe. Irgendwann muss ich ja auch mal arbeiten.
So könnt ja mal sagen falls ihr irgendwelche fehler seht..
Greetings Nukacola
Code: Alles auswählen
mov context.ContextFlags, CONTEXT_CONTROL
invoke GetThreadContext,DBEvent.u.CreateProcessInfo.hThread, addr context
mov eax,context.regEbp
mov stackebp,eax
mov eax,context.regEsp
mov stackesp,eax
invoke SetThreadContext,DBEvent.u.CreateProcessInfo.hThread, addr context
invoke MessageBox, 0, addr LoopSkipped, addr AppName, MB_OK+MB_ICONINFORMATION