AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi CreateThread unter 64 bit - Crash
Thema durchsuchen
Ansicht
Themen-Optionen

CreateThread unter 64 bit - Crash

Ein Thema von Zacherl · begonnen am 2. Mai 2012 · letzter Beitrag vom 2. Mai 2012
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

CreateThread unter 64 bit - Crash

  Alt 2. Mai 2012, 19:22
Hallo Leute,

ich habe grade mal versucht in einer 64 bit Anwendung mit CreateThread() einen neuen Thread zu starten. Unter 32 bit funktioniert folgender Code:
Delphi-Quellcode:
function DummyThread(Parameter: Pointer): DWord; stdcall;
begin
  Result := 0;
end;

CreateRemoteThread(hProcess, nil, 0, @DummyThread, nil, 0, TID);
Unter 64 bit führt der Aufruf allerdings direkt zum Crash. Wenn ich innerhalb des Threads einen Breakpoint setze, dann sehe ich, dass auch der Parameter Pointer komplett falsch ist. Irgendwie wird also der Stack corrupted.

Muss ich unter 64 bit da eine andere Aufrufkonvention als stdcall angeben?

Viele Grüße
Zacherl
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#2

AW: CreateThread unter 64 bit - Crash

  Alt 2. Mai 2012, 19:33
Muss ich unter 64 bit da eine andere Aufrufkonvention als stdcall angeben?
Definitiv nein. In x64 (auf Windows) gibt es nur noch eine Aufrufkonvention.

Du versuchst aber keine "Schweinereien" wie einen Thread aus einem 64bit-Prozeß in einem WOW64-Prozeß zu erzuegen, oder?
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.300 Beiträge
 
Delphi 12 Athens
 
#3

AW: CreateThread unter 64 bit - Crash

  Alt 2. Mai 2012, 19:35
Leider kann ich dir nicht helfen, hätte aber eine Frage an dich. Warum nicht TThread ? Ich denke mal daß die ganzen Anpassungen für 64 Bit dort eingeflossen sind.
[Edit] ... sorry, habe das Remote übersehen. Nehme alles zurück.[/Edit]

Geändert von haentschman ( 2. Mai 2012 um 19:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: CreateThread unter 64 bit - Crash

  Alt 2. Mai 2012, 19:44
Du versuchst aber keine "Schweinereien" wie einen Thread aus einem 64bit-Prozeß in einem WOW64-Prozeß zu erzuegen, oder?
Nein nein

Ich habe das Problem grade beheben können. Vorher hatte ich die Threadfunktion innerhalb einer anderen Funktion, also folgendermaßen, deklariert:
Delphi-Quellcode:
function Inject(..): Boolean;

function DummyThread(P: Pointer): DWord; stdcall;
begin
  Result := 0;
end;

begin
  CreateRemoteThread(..);
end;
Dies hat unter 64 Bit wohl die Probleme verursacht. Nachdem ich die Threadfunktion nun über der Inject Funktion deklariert habe, funktioniert jetzt alles.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#5

AW: CreateThread unter 64 bit - Crash

  Alt 2. Mai 2012, 20:11
Ich habe das Problem grade beheben können. Vorher hatte ich die Threadfunktion innerhalb einer anderen Funktion, also folgendermaßen, deklariert:
Delphi-Quellcode:
function Inject(..): Boolean;

function DummyThread(P: Pointer): DWord; stdcall;
begin
  Result := 0;
end;

begin
  CreateRemoteThread(..);
end;
Dies hat unter 64 Bit wohl die Probleme verursacht. Nachdem ich die Threadfunktion nun über der Inject Funktion deklariert habe, funktioniert jetzt alles.
Aua. Allerdings. Ähnliches kannst du sogar provozieren wenn du auf 32bit die register-Aufrufkonvention benutzt. Hab ich mich auch mal vor Jahren mit angeschmiert und seitdem meine Callbacks fein säuberlich von anderen Funktionen getrennt. Das Problem ist also sozusagen zurück. Macht Sinn. Aber gut es wieder im Hinterkopf zu haben.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: CreateThread unter 64 bit - Crash

  Alt 2. Mai 2012, 20:59
Das Problem ist also sozusagen zurück. Macht Sinn. Aber gut es wieder im Hinterkopf zu haben.
Embarcadero war beim Entwickeln des 64-Bit Compilers einfach zu faul, die gleiche Optimierung wie beim 32-Bit Compiler für lokale Funktionen einzubauen. In 32-Bit wird der versteckte "EBP" Parameter nur mitgegeben, wenn die lokale Funktion auf den äußeren Scope zugreift. Beim 64-Bit wird der versteckte "RBP" Parameter immer mitgegeben. Und das führt nun bei sämtlichen Callbacks zu Problemen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz