Hallo ePVP Coder
Bin gerade dabei eine Qt dll zu programmieren, aber ich kann diese leider nicht injecten. CheatEngine sagt mir, dass der dll loader nicht geladen werden konnte und andere Injektoren gehen auch nicht.
Du rufst im Prinzip den Thread auf mit einem void-Zeiger, wo ein int erwartet wird.
int main dürfte hier auch problematisch werden, du hast im Prinzip 2 Einstiegspunkte definiert (einer für Anwendungen, einer für Dlls), keine Ahnung, wie CE das handled, aber daran könnte es liegen.
Du kannst 1. nicht einfach eine main und eine DllMain haben, da es dann afaik undefiniertes Verhalten hervorruft. Wieso willst du Qt injecten? Injecte über deinen Hack doch einfach eine Dll, oder geht es dir um die GUI, die du Ingame haben willst?
Vielen Dank ! Ich werde es morgen ausprobieren und dann mal berichten. Das mit den 2 Einstiegspunkten scheint kein Problem zu sein, da auch die Umbenennung der main Funktion nichts an dem Problem ändert. Hab eben mal mit Olly geschaut. Die dll wird anscheinend injected, jedoch wird das Modul sofort wieder entladen. Sorry für Rechtschreibfehler. Bin am Handy.
Und ja genau, ich möchte die dll injecten und die Funktionen über das Fenster ansteuern.
So ich habe jetzt den Code von snow und von bloodx ausgetestet, aber leider funktioniert keiner von denen. CheatEngine meldet mir "Failed injecting the DLL".
Hat jemand eine Ahnung, was ich noch tun könnte?
Wo genau der Crash passiert, wissen wir immernoch nicht. Erstell mal ein C++ Projekt und lade daraus die DLL manuell. Von da aus kannst du leichter auf GetLastError etc. zugreifen.
Wo genau der Crash passiert, wissen wir immernoch nicht. Erstell mal ein C++ Projekt und lade daraus die DLL manuell. Von da aus kannst du leichter auf GetLastError etc. zugreifen.
Btw:
bah! Danke für den Link :/ arbeite immer mit CreateThread ._.'
Das solltest du immer verwenden, wenn du kannst. std::thread abstrahiert die direkten lowlevel Aufrufe. Das bringt Sicherheit, Plattformunabhängigkeit etc.
Bei std::thread sollte man übrigens .detach() verwenden, damit der Thread von der Funktion(?) unabhängig agieren kann, da sonst nach dem return TRUE der Thread auch vorbei ist.
Und der Prototyp ist da einfacher, das ist auch cool. Bei S4 aber z.B. crasht das das Spiel. :/
EDIT: Der Post bezieht sich nur auf DLLs, im eigenen Programm muss man das so machen, wie es halt gemacht werden sollte.
Hatte das Projekt als Qt Library erstellt. Ich denke, dass das ein Fehler war. Hab vorhin versucht, ein leeres c++ projekt zu erstellen und alles ans laufen zu bringen, aber ich habe es nicht hinbekommen. Danach habe ich mich ein bisschen in Qt eingelesen und auch wahrscheinlich meine Fehlerquelle ( moc files) gefunden. Werde mich morgen eventuell nochmal melden
Um es mal in den Raum zu werfen: Was regt ihr euch alle über DllMain und main auf? Eigentlich sollte die IDE je nach Projektart eine bestimmte Funktion als Entrypoint sehen, ich sehe da also keine Konfliktgefahr.
Das GUI innerhalb einer DLL zu benutzen, wird schon irgendwie gehen. Mit der MFC geht das auch. Ist halt bei diesen Wrappern, die den ganzen Win32 Code verstecken, etwas aufwändiger. Erst recht, weil der Projekttyp DLL ja auch nicht dafür gedacht ist, ein GUI zu zeigen. Entsprechend muss man natürlich auch die ganzen Forms bei VS selbst anlegen. Ich denke bei QT wirds da nicht anders sein.
Quote:
Originally Posted by Schlüsselbein
Das solltest du immer verwenden, wenn du kannst. std::thread abstrahiert die direkten lowlevel Aufrufe. Das bringt Sicherheit, Plattformunabhängigkeit etc.
Plattformunabhängigkeit bei einer Dll-Injection? Srsly? ;f
Ob das an dem Injection-Fehler was ändert weiß ich nicht, aber die QApplication möchte das denke ich so.
Zitat Referenz:
Quote:
Warning: The data referred to by argc and argv must stay valid for the entire lifetime of the QApplication object. In addition, argc must be greater than zero and argv must contain at least one valid character string.