|
You last visited: Today at 09:03
Advertisement
DLL Programmieren?
Discussion on DLL Programmieren? within the C/C++ forum part of the Coders Den category.
11/27/2011, 21:59
|
#1
|
elite*gold: 0
Join Date: May 2009
Posts: 122
Received Thanks: 160
|
DLL Programmieren?
Hi Epvpers,
ich versuche zZt einen Antihack zu programmieren, habe aber schon beim Programmieren der DLL Probleme:
DLL:
Code:
#include "windows.h"
void InjNachricht()//der erstellte Thread
{
//MessageBox(0, "Siehe da! Es klappt :P", " Whohoo", 0);
}
long CheckAntiHack(void)
{
return 85673769;
}
int WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved)
{
if(reason==DLL_PROCESS_ATTACH)
{
CreateThread(0, 0, (LPTHREAD_START_ROUTINE) InjNachricht, 0, 0, 0);
}
return true;
}
und der Aufruf der DLL:
Code:
typedef long (*AntiHack) (void) ;
BOOL CallDLL()
{
HINSTANCE hInstLibrary = LoadLibrary("Antihack.dll");
AntiHack antihack;
if(hInstLibrary)
{
antihack = (AntiHack)GetProcAddress(hInstLibrary, "CheckAntiHack");
Error( "Errorcode %i",GetLastError() );
if( antihack != NULL )
{
Error("in2");
if( (*antihack)() != 85673769 )
return FALSE;
}
else
return FALSE;
}
else
{
return FALSE;
}
return TRUE;
}
...die Errorfunktion macht eine Ausgabe in eine Logdatei und zwar den Errorcode des letzten Programmaufrufs und der zeigt mir an, dass eine Funktion nicht gefunden werden konnte ( Errorcode 127 ).
Die DLL selbst wird aber geladen.
Findet ihr einen Fehler?
|
|
|
11/27/2011, 22:16
|
#2
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
CreateThread(0, 0, (LPTHREAD_START_ROUTINE) &InjNachricht, 0, 0, 0);
und ein thread ist DWORD WINAPI und nicht void...
und musst die funktion in der dll als extern "C" deklarieren, sonst stimmt der name nicht...
|
|
|
11/28/2011, 11:55
|
#3
|
elite*gold: 150
Join Date: Dec 2010
Posts: 112
Received Thanks: 159
|
CreateThread macht evtl. keinen Sinn, weil...
Quote:
During process startup and DLL initialization routines, new threads can be created, but they do not begin execution until DLL initialization is done for the process.
|
einfacher ist
Code:
if(reason==DLL_PROCESS_ATTACH)
{
injNachricht();
}
|
|
|
11/28/2011, 14:22
|
#4
|
elite*gold: 0
Join Date: May 2009
Posts: 122
Received Thanks: 160
|
...habe die DLL umprogrammiert:
Code:
#include "windows.h"
DWORD WINAPI InjNachricht()//der erstellte Thread
{
//MessageBox(0, "Siehe da! Es klappt :P", " Whohoo", 0);
return 0;
}
extern "C" long CheckAntiHack(void)
{
return 85673769;
}
int WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved)
{
if(reason==DLL_PROCESS_ATTACH)
{
CreateThread(0, 0, (LPTHREAD_START_ROUTINE) InjNachricht, 0, 0, 0);
}
return true;
}
allerdings funktioniert es leider immer noch nicht...
er gibt mir ständig den Errorcode 127 zurück O.O
trotzdem Danke für eure Vorschläge
|
|
|
11/28/2011, 14:33
|
#5
|
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 451
|
Macht Sinn, da ein neuer Thread nicht blockiert.
Und ob DWORD WINAPI oder void macht keinen Unterschied.
Ich kenne mich mit C++ zwar nicht gut aus, aber soweit ich weiß hat Dr. Coxxy mit dem zweiten Teil Recht:
Mit extern "C" stellst du das Name Mangling ab und findest die Funktion dann auch über GetProcAddress.
Kannst ja einfach mal LordPE zur Hand nehmen und schauen, was deine Dll so exportiert (müsste schätzungsweise sowas wie _CheckAntiHack@0 sein).
Du könntest die Funktion der Dll auch direkt über __declspec(dllimport) importieren, so geschieht das LoadLibrary & GetProcAddress automatisch.
EDIT:
Oh, funktioniert dennoch nicht?
Müsste denn soweit alles stimmen, wenn du dir mal die Exports in LordPE anschaust?
(War zwischendrin 'ne Pizza in den Ofen schieben und habe den Post danachn erst abgeschickt..)
|
|
|
11/28/2011, 14:37
|
#6
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
void ist falsch, ende aus.
so hat microsoft es nun mal festgelegt, wenn du dir mal durchliest, was ms alles für sonderregeln erstellen musste weil damals jede menge programmierer bei einigen dingen gesagt haben, "uh, geht doch?" und sich dann wundern wieso das mit neuem windows plötzlich nicht mehr ging oder "unerklärliche" abstürze liefert, wird dir schlecht.
mit dem rest hat link recht...
schau mal mit LordPE oder ähnlichem an, wie die funktion heißt, kann sein, dass nen unterstrich davor gesetzt wird o.ä....
|
|
|
11/28/2011, 14:47
|
#7
|
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 451
|
ExitThread interessiert nicht, ob der Stack misaligned ist, und wird es auch nie, da dieser danach sowieso freigegeben wird.
Somit macht es keinen Unterschied, ob DWORD WINAPI oder void.
|
|
|
11/28/2011, 14:53
|
#8
|
elite*gold: 0
Join Date: May 2009
Posts: 122
Received Thanks: 160
|
vielen Dank für eure Antworten
ich habe jetzt nochmal alles in C programmiert ( auch mein Hauptprogramm ) und jetzt funktioniert es
|
|
|
11/28/2011, 23:49
|
#9
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Quote:
Somit macht es keinen Unterschied, ob DWORD WINAPI oder void.
|
Doch, es ist stilistisch falsch.
Schön und gut, dass du gern in ASM programmierst, aber das hier ist C/C++.
Da gibt es Datentypen. Und an die hält man sich!
Wofür gibts sonst das MS SDK? Kann man doch gleich die Header weglassen, alles per GetProcAddress laden und in void* Zeigern speichern und per ASM callen...
|
|
|
11/29/2011, 00:31
|
#10
|
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 451
|
In kompilierter Form macht es faktisch keinen Unterschied (und wenn man den Parameter noch hinzufügt, macht es das RETN zu einem RETN 4, was ein Unterschied wäre, der allerdings absolut null Auswirkungen hätte).
C sieht es genauso und C++ (kann sein, dass gemeckert wird, wenn STRICT aktiviert ist) ebenso.
Wenn du Java benutzen würdest, würde ich dir abkaufen, dass du dich um sowas sorgst. Aber als C/C++-Programmierer? Shame on you :P
|
|
|
11/29/2011, 12:12
|
#11
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Was an meinem Post war unverständlich? Die kompilierte Form ist irrelevant. Wir reden hier von C/C++
Nur weil der Compiler nicht so streng wie bei Java ist, macht es das nicht richtig!
Nach deiner Logik: Warum überhaupt lokale Variablen nutzen? Einfach direkt auf den Stack zugreife. Ergebnis is doch das gleiche...
Die ganzen High Level Prinzipien wurden nicht entworfen, damit man C++ dann doch nur als komfortables ASM verwendet.
|
|
|
|
Similar Threads
|
Programmieren
04/08/2011 - Main - 6 Replies
Hi ich wollte mal eben programmieren lernen. :D Will mich damit auch gerne das ganze wochende bzw par monate auseinandersetzen.
Ich würde gerne in die Richtung games gehen bzw. hacks.
Hab bereits mit AutoIT angefangen.
Wär nett wenn mir wer bei skype Tipps geben könnte oder jemand ein Programm vorschlagen könnte.
Skype:tomateeeeeeeeee
|
programmieren
04/03/2011 - Main - 15 Replies
Hallo Liebe epvpers
Ich habe vor einiger Zeit das Projekt World at Conflict gestartet
Das Spiel soll später ein FPS darstellen
nun fehlen mir und meinem Freund die Mitarbeiter
Bevorzugt werden die die in der nähe von Niedersachsen wohnen da wir auch einen Konferenz raum haben wir stellen ein
|
Programmieren
02/06/2011 - Main - 21 Replies
Hallo wollte mal fragen ob hier jemand das programmieren kann...:confused:
Mit C++ usw..
Wenn ja würde mir der/die jenigen das beibringen das wäre ziemlich nett dah ich später mal meine eigenen games programmieren möchte.. (:
Bitte um Antwort.. (:
|
Bot Programmieren^^
06/16/2010 - General Coding - 9 Replies
Server leider hab ich 0 Plan was man wissen muss oder was für ein aufwand es darstellen würde^^
Ich suche einen Bot mit dem man Pm´s verschicken kann sprich ein Script
zum einem könnte ich mir vorstellen das man zuerst alle User namen sammelt
sprich über den link alle user id´s durchgeht die namen von der hp in ein Liste steckt
und mit der Liste eine vorgefertigte Pm verschickt ka wie groß der Aufwand ist und ka ob ich überhaupt in der richtigen rubrik bin xD
sry Rechtschreibung...
|
Programmieren u.a.
03/08/2009 - General Coding - 13 Replies
Hey Leute, ich bin komme mal zu Sache.
Ich will Programmieren lernen.
Ich bin 13 Jahre und wohne in Belgien darum habe ich keine Chance mich richtig mit 13 Jahren über Programmieren und so zu Informieren.
Darum die Frage.
Kann mir einer von euch die das Lesen, eine Seite/HP wo man nur darüber bescheid kriegt, was das ist ... .
Wen einer natürlich selber Lehrer spielen will, immer gern, PN me oder so,
Ich habe MSN, ICQ, Skype.
Danke im voraus
|
All times are GMT +2. The time now is 09:03.
|
|