Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 09:03

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

Advertisement



DLL Programmieren?

Discussion on DLL Programmieren? within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #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?
Krustenkäse is offline  
Old 11/27/2011, 22:16   #2
 
Dr. Coxxy's Avatar
 
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...
Dr. Coxxy is offline  
Thanks
2 Users
Old 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();
}
5769854332 is offline  
Thanks
1 User
Old 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
Krustenkäse is offline  
Old 11/28/2011, 14:33   #5
 
link's Avatar
 
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..)
link is offline  
Thanks
1 User
Old 11/28/2011, 14:37   #6
 
Dr. Coxxy's Avatar
 
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.ä....
Dr. Coxxy is offline  
Thanks
1 User
Old 11/28/2011, 14:47   #7
 
link's Avatar
 
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.
link is offline  
Old 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
Krustenkäse is offline  
Old 11/28/2011, 23:49   #9


 
MrSm!th's Avatar
 
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...
MrSm!th is offline  
Old 11/29/2011, 00:31   #10
 
link's Avatar
 
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
link is offline  
Old 11/29/2011, 12:12   #11


 
MrSm!th's Avatar
 
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.
MrSm!th is offline  
Reply

Tags
dll


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2024, 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 ©2024 elitepvpers All Rights Reserved.