| Autor |
Beitrag |
AHT
      
Beiträge: 207
|
Verfasst: Fr 01.02.08 20:07
Ich habe einen Pointer auf das erste Element eines Stacks eines fremden Threads und die maximale Größe dieses Stacks. Komme ich irgendwie an einen Pointer auf das letzte Element?
(NT basierendes OS - 2000/XP/Vista)
|
|
Allesquarks
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: Fr 01.02.08 22:24
Ich weiß zwar nicht wie man daran kommt. Die Frage ist aber auch wann du dies möchtest. Denn sobald dieser andere Thread mal wieder Rechenzeit bekommt ist deine Information nichtig. Und dass es Grundsätzlich geht sieht man ja an diversen Debuggern! Aber den genauen Befehl kann ich dir nicht sagen.
|
|
AHT 
      
Beiträge: 207
|
Verfasst: Sa 02.02.08 11:48
Allesquarks hat folgendes geschrieben: | | Die Frage ist aber auch wann du dies möchtest. Denn sobald dieser andere Thread mal wieder Rechenzeit bekommt ist deine Information nichtig. |
Das ist eigentlich kein Problem, Threads kann man anhalten. Zu dem Zeitpunkt, zu dem ich die Info benötige, bestehen diesbezüglich sogar noch weniger Probleme. Im Prinzip benötige ich die Adresse des ESP Registers eines fremden Threads - hat noch jemand Ideen, wie man an diese Adresse gelangen könnte? Benötige keinen Code - etwas "Brainstorming" würde mir vielleicht schon reichen...
|
|
Jann1k
      
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: Sa 02.02.08 12:35
Könnte man den Stack nicht umschichten auf einen anderen Stack, von diesem dann das erste Element bearbeiten (wäre ja das letzte des ersten Stacks) und dann wieder auf den ursprünglichen Stack umschichten?
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 02.02.08 12:52
Was ist bei Dir das erste Element?
Ich nehm mal an:
erstes Element = Top Of Stack
letztes Element = Bottom of Stack
Wenn dem so ist: Versuch mal, ob Dir GetThreadContext was hilft. Damit kannste die Register eines fremden Threads direkt auslesen; Rechte vorausgesetzt. Willst wohl ne Art Stack-Parser für nen Call-Stack schreiben?
HTH.
_________________ 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.
|
|
AHT 
      
Beiträge: 207
|
Verfasst: Sa 02.02.08 13:06
BenBE hat folgendes geschrieben: | Was ist bei Dir das erste Element?
Ich nehm mal an:
erstes Element = Top Of Stack
letztes Element = Bottom of Stack
Wenn dem so ist: Versuch mal, ob Dir GetThreadContext was hilft. Damit kannste die Register eines fremden Threads direkt auslesen; Rechte vorausgesetzt. Willst wohl ne Art Stack-Parser für nen Call-Stack schreiben?
HTH. |
Besten Dank, auf deine Hilfe habe ich gehofft. Das hilft mir bestimmt weiter - mir fehlt aber die CONTEXT Struktur. Hast du einen Link?
|
|
AHT 
      
Beiträge: 207
|
Verfasst: Sa 02.02.08 13:30
OK, ich habe, glaube ich, was gefunden...
Besten Dank, BenBe - hatte schon die Vermutung, dass man über GetThreadContext an die register kommen müßte, war mir aber nicht sicher. Werde mal schauen, ob ich jetzt weiter komme!
Gruß
AHT
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 02.02.08 14:13
Siehe MSDN für besagte Funktion: msdn2.microsoft.com/...ms679362(VS.85).aspx
Dort hast Du unten bei lpContext nen Link zur Struktur.
Oder Direktlink: msdn2.microsoft.com/...ms679284(VS.85).aspx
*G* Seh grad: MSDN spart hier mit Infos ... Dann eben im Delphi-Source schauen. Dürfte Delphi ja bereits implementiert haben... Schau mal nach TContext o.s.ä. Jup: Windows.pas: PContext, TContext und CONTEXT. Ist sogar zur Abwechslung mal vollständig ...
_________________ 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.
|
|
AHT 
      
Beiträge: 207
|
Verfasst: Sa 02.02.08 14:29
BenBE hat folgendes geschrieben: |
*G* Seh grad: MSDN spart hier mit Infos ... |
Auf diese "Sparsamkeit" bin ich bereits gestern gestoßen - deshalb meine Frage hier. Wäre auch sehr merkwürdig, wenn Microsoft über dieses Thema mehr als nötig preisgeben würde.
Nochmals besten Dank für deine Suchtipp - über die Headerdateien von MASM (NTDDK.INC) bin ich auf diesen Link gestoßen - vielleicht hilft der dem ein oder anderen auch:
www.joachimrohde.com...es/article.php?id=87
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 02.02.08 15:39
Dachte eigentlich, Du hättest bei den Dingen, die du machst, sowieso das PSDK bei Dir rumliegen (DL-Link auf Nachfrage) Da steht die Struktur nämlich auf jeden Fall drin. Und das wäre meine nächste Anlaufstelle nach MSDN gewesen (wenn ich an meinem Dev-Rechner säße).
Platform-SDK gibt's unter www.microsoft.com/msdownload/platformsdk/ zum DL ... ACHTUNG: >1GB nach Install!!!
_________________ 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.
|
|
AHT 
      
Beiträge: 207
|
Verfasst: Sa 02.02.08 16:14
BenBE hat folgendes geschrieben: | Dachte eigentlich, Du hättest bei den Dingen, die du machst, sowieso das PSDK bei Dir rumliegen
|
DDK ja, PSDK nicht. Desweiteren noch das KmdKit für ASM und eine kleinere Doku über Native API Funktionen, ohne die ich eigentlich fast nirgendwo mehr auskomme.
Habe nur alte Rechner mit sehr kleinen Festlatten und finde auch meist in den großen M$ Downloads nicht das, was ich benötige.
|
|
AHT 
      
Beiträge: 207
|
Verfasst: Sa 02.02.08 17:06
OK, Code fertig und sieht gut aus - die mir noch fehlenden Adressen habe ich jetzt.
BenBE hat folgendes geschrieben: | Willst wohl ne Art Stack-Parser für nen Call-Stack schreiben?
HTH. |
Ich möchte den Stack des Threads eines fremden Prozesses so beeinflussen, dass dieser Threads (von außen von mir gesteuert) eine beliebige API ausführt. Bin auf Kapertour... 
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 02.02.08 17:32
Siehe CreateRemoteThreadX in der uallCollection 
_________________ 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.
|
|
AHT 
      
Beiträge: 207
|
Verfasst: Sa 02.02.08 18:02
BenBE hat folgendes geschrieben: | Siehe CreateRemoteThreadX in der uallCollection  |
Siehe TNT.
Ich kann mir die Collection im Augenblick nicht ansehen, aber ich denke, ich benutze in TNT die gleiche Technik, bloss mit einer anderen Programmiersprache.
|
|
|