Fremder Funktionsaufruf
Übersicht

![]() |
Der EisvogelBetreff: Fremder Funktionsaufruf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo
Da ich mit CreateRemoteThread keinen Erfolg hatte Funktionen anderer Programm mit mehreren Parametern aufzurufen habe ich mich zu Dll Injection gewagt. Die Injection klappt prima alles andere auch. Die Funktionen werden aufgerufen und bewirken ihren Zweck. Ja aber was ist den jetzt das Problem? Anscheinend wirft meine Dll ab und zu EXCEPTIONS. Das vermute ich zumindest mal, da das Programm auf welches ich mich beziehe eine eigene Abfangroutine für Exceptions hat und diese im Error Log immer ovn Access Violations in meiner Dll spricht. Die Funktionen die ich aufrufen möchte werden laut IDA Pro so deklaiert: Code: [AUSKLAPPEN] public: virtual void __thiscall CPlayer::UseAction(int)
public: virtual void __thiscall CPlayer::SetTarget(long, signed char) Diese Funktionen binde ich in meine Dll wie folgt ein: BlitzMax: [AUSKLAPPEN] Local SetTarget(param1:Int, param2:Byte) = Byte Ptr(settarget_address) Bei SetTarget wird laut IDA Pro ein Long verlangt, aber wenn ich Long angebe, funktioniert die Funktion nicht deshalb nehme ich Int. Diese Funktionen verwende ich dann in meiner Dll wie alle anderen. Also zum Beispiel so: BlitzMax: [AUSKLAPPEN] UseAction(3)
Diese Funktionsaufrufe funktionieren perfekt. Es passiert was passieren soll, aber nach kurzer Zeit schon stürzt das Programm ab und ich finde im Error Log eine Access Violation meiner Dll. Ich haber schon versucht den Fehler zu beseitigen in dem ich nur eine der beiden Funktionen verwende, aber egal welche ich benutze, es kommt zum Absturz. Woran kann das liegen? Gibt es eine Möglichkeit dem Fehler auf die Spur zu gehen? Gibt es alternativen? MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe zwar keine großen Erfahrungen mit C++ gesammelt, aber kann es sein, dass diese 'Funktionen' eher 'Methoden' sind? (kein "static")
Wie man diese aber einbindet, weiß ich nicht. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
thiscall heisst immer, dass es sich um member funktionen handelt, die zu einer instanz der klasse gehören. thiscall ist eine calling convention, die BMax nicht beherrscht. Es ist also unmöglich, diese funktionen in BMax aufzurufen.
Selbst aus C++ herraus würde dies schwierig, da memberfunktions-pointer immer recht unsicher sind. |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber warum funktioniert es dann kurzzeitig und führt erst später zu einem Error? | ||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
es kann auch kurzfristig nicht funktionieren, da du den this-pointer nicht mit an die funktion gibst. | ||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber es funktioniert. Das weiß ich, da ich ja sehe das meine Dll arbeitet, doch dann stürzt sie aufgrund einer Access Violation ab. | ||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nicht abstürzen und funktionieren sind 2 verschiedene dinge. | ||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was genau willst du damit sagen?
Ich kann genaustens sehen, dass meine Dll arbeitet, da genau das passiert was die Dll bezwecken soll, was nicht passieren würde wenn die Dll nicht arbeiten würde, doch nach kurzer Zeit stürzt es ab. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielleicht greifen deine Methoden nicht auf Objektvariablen zu und benutzen so den this-Zeiger (der sich auf dem Stack befindet) nicht. Das würde erklären, warum das Programm nicht abstürzt.
Weil dein Programm aber von diesem Zeiger nichts weiß, wird er beim Aufruf auch nicht auf dem Stack gespeichert. Die Methode in der DLL setzt aber voraus, dass er sich dort befindet und versucht, ihn nach dem Aufruf vom Stack zu entfernen. Dabei werden fälschlicherweise andere Werte, die mit der Methode nichts zu tun haben, gelöscht, was dann zum Absturz führt. |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das hört sich irgendwie schön plausibel an, dennoch etwas verwirrend, da ich dann wohl oft den teil erwische an dem die richtige Address auf dem Stack liegt.
Jetzt kommts aber lustig: Ich habe meine Dll bisher immer versehentlich im Debug-Modus compiled (hab vergessen -r zu setzen) jetzt wo ich sie im Release-Modous compile funktioniert alles wunderbar. Das macht die Erklärung von dir zwar zu Nichte wenn ich das richtig verstanden habe, aber so lange es funktioniert bin ich glücklich. Im Moment läuft die Dll seit ca. 5 min ohne Absturz, meine bisheriger Rekord lag bei 14 Sekunden. Schon lustig dass der Debug-Modus diesen Absturz verursacht. Danke an alle die mir geholfen haben. Ich bin jetzt wieder einen Schritt weiter. MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du lebst also bewusst mit einem schweren fehler, der zu 100% random undefined verhalten mit beliebigen crashes und allem drum rum führen kann?
Ist also schonmal eine Person mehr auf meiner Liste, deren Software ich von meinem Rechner fern halte. |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Glaub mir die Software wirst du niemals verwenden, und anscheinend wurden die Fehler durch den Debug-Modus verursacht, also hatte es nur sekundär etwas mit diesen Funktionen zu tun. Jetzt läuft alles prima, was bedeutet, das keine Fehler mehr auftauchen, da diese Fehler direkt in einen Log-Datei geschrieben würden, welche derzeit noch leer ist, und die Dll noch immer fehlerfrei läuft. | ||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
"durch den Debug-Modus verursacht": Vielleicht existieren die Sicherungsmechanismen, die den Fehler bemerken, auch nur im Debug-Modus?
mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja dann muss irgendwas grundsätzlich falsch sein, da nach längerem probieren auch Fehler erzeugt wurden wenn ich keine der Funktionen verwendet habe. | ||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group