Register for your free account! | Forgot your password?

You last visited: Today at 11:55

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Qt dll

Discussion on Qt dll within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 1000
Join Date: Apr 2012
Posts: 1,003
Received Thanks: 208
Qt dll

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.

Hier ist der Code (main.cpp):
Code:
#define NOMINMAX
#include <windows.h>
#include <QApplication>
#include <QtGui>
#include "window.h"

int main(int argc, char *argv[])
{
	argc =0;
	QApplication MyApp(argc, NULL);
	window *wnd = new window;
	wnd->show();
	return MyApp.exec();
}

BOOL APIENTRY DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID lpReserved)
{
	switch (fdwReason)
	{
	case DLL_PROCESS_ATTACH:
		{
			HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)main, (LPVOID)hInstance, 0, NULL);
		}
		break;

	case DLL_PROCESS_DETACH:
		break;
	}

	return TRUE;
}
In der window.cpp und den anderen Dateien wurde nichts verändert.


Vielen Dank

qkuh
qkuh is offline  
Old 07/03/2013, 00:45   #2

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Zuerst: Dein Thread-Prototyp ist absolut gegen jede vernünftige Regel. :<
Korrekt müsste er so sein:
Code:
DWORD WINAPI ThreadProc(
  _In_  LPVOID lpParameter
);
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.

Bau deine Threadfunktion mal so um:

Code:
DWORD WINAPI main(LPVOID param)
{
	QApplication MyApp(0, NULL);
	window *wnd = new window;
	wnd->show();
	return MyApp.exec();
}
als Parameter kannste einfach nullptr übergeben, du brauchst dann auch keine Casts mehr.
snow is offline  
Thanks
1 User
Old 07/03/2013, 00:47   #3

 
Delinquenz's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 1,160
Received Thanks: 232
Alter!? Du hast 2 potenzielle Entry-Points, lol.

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?

€: Zu langsam
Delinquenz is offline  
Thanks
1 User
Old 07/03/2013, 01:16   #4
 
elite*gold: 1000
Join Date: Apr 2012
Posts: 1,003
Received Thanks: 208
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.
qkuh is offline  
Old 07/03/2013, 02:16   #5




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,539
Code:
unsigned long __stdcall MainThread( void* )
{
QApplication MyApp( 0 , 0 );
window *wnd = new window();
wnd->show();

return TRUE;
}

int __stdcall DllMain(HINSTANCE , unsigned long Reason, void* )
{
	switch (Reason)
	{
	  case DLL_PROCESS_ATTACH:
			CreateThread(0 , 0, &MainThread, 0 , 0, 0 );
           break;
	}

	return TRUE;
}
glaube aber nicht dass du so einfach die GUI call'n kannst.

Returnen bringt auch nicht's so wie du es dort oben vorhattest.
bloodx is offline  
Old 07/03/2013, 13:51   #6
 
elite*gold: 1000
Join Date: Apr 2012
Posts: 1,003
Received Thanks: 208
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?
qkuh is offline  
Old 07/03/2013, 18:06   #7
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
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:
Schlüsselbein is offline  
Old 07/03/2013, 19:36   #8




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,539
Quote:
Originally Posted by Schlüsselbein View Post
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 ._.'

mhm und was ist eig mit std::thread ?
bloodx is offline  
Old 07/03/2013, 19:55   #9
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Das solltest du immer verwenden, wenn du kannst. std::thread abstrahiert die direkten lowlevel Aufrufe. Das bringt Sicherheit, Plattformunabhängigkeit etc.
Schlüsselbein is offline  
Old 07/03/2013, 20:06   #10




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,539
Alles klar dann werde ich auf std::thread ab jetzt zurück greifen war mir nicht sicher ob es wirklich viel bringt.
bloodx is offline  
Old 07/03/2013, 20:08   #11

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
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.
snow is offline  
Old 07/03/2013, 23:36   #12
 
elite*gold: 1000
Join Date: Apr 2012
Posts: 1,003
Received Thanks: 208
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
qkuh is offline  
Old 07/04/2013, 00:32   #13


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
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 View Post
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
MrSm!th is offline  
Old 07/04/2013, 00:59   #14
 
Padmak's Avatar
 
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
Noch dazu GLAUBE ich sollte man die QApplication so erstellen:
Code:
argc = 1;
char* bla[1] = {"irgendeinname"};
QApplication MyApp(argc, bla);
window *wnd = new window;
wnd->show();
return MyApp.exec();
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.
Padmak
Padmak is offline  
Old 07/04/2013, 09:04   #15
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
@Smith: ich hab die Frage wegen std::thread allgemein verstanden.
Schlüsselbein is offline  
Reply




All times are GMT +1. The time now is 11:57.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.