Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 18:10

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

Advertisement



C++ Memcpy

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

Reply
 
Old   #1
 
~kau~'s Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 634
Received Thanks: 794
Question C++ Memcpy

Hey Leute,
wie immer!! hab mal ne Frage ;D Kann mir einer denn Fehler im Source sagen?!

Source:
t soll auf Addy übertragen werden, aber es ändert 0 immer in eine andere zahl oO
ty 4 Help
~kau~ is offline  
Old 12/25/2010, 23:47   #2
 
elite*gold: 0
Join Date: Apr 2006
Posts: 6,597
Received Thanks: 1,830
der fehler sollte im letzten argument von memcpy liegen.

Quote:
DWORD Addy = 0x00AA678;
int t = 300;
memcpy((void*)Addy,&t,sizeof(t));
Medix is offline  
Thanks
1 User
Old 12/26/2010, 01:15   #3
 
~kau~'s Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 634
Received Thanks: 794
ok fixxed ^^ kp wie aber es funzt jetzt 100%.
Nächste Frage : wenn meine addy char ist kann ich dann auch int addy nehmen oder muss ich da char/connest char* nehmen.
~kau~ is offline  
Old 12/26/2010, 02:24   #4




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,539
du kannst 300 nicht auf nur 1 byte schreiben deswegen ging deins auch nicht oO
bloodx is offline  
Thanks
1 User
Old 12/26/2010, 02:26   #5
 
~kau~'s Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 634
Received Thanks: 794
:O das hatte ich hier nicht verbessert in meinem source schon ;D aber ty...
~kau~ is offline  
Old 12/26/2010, 09:05   #6
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
Quote:
Originally Posted by kauknochen View Post
Hey Leute,
wie immer!! hab mal ne Frage ;D Kann mir einer denn Fehler im Source sagen?!
Jo, du kannst die Sprache nicht. Haste aber fein kopiert (:
MoepMeep is offline  
Thanks
1 User
Old 12/28/2010, 19:28   #7


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Code:
#include <Windows.h>
#include <stdio.h>
#pragma warning(disable: 4312)
	
[COLOR="Red"]void Hack()[/COLOR]
        {
			int Addy = 0x00AA678;
			int t = 300;
            [COLOR="DarkOrange"]memcpy((void*)Addy,&t,1);[/COLOR]
        }

int WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved)
{
    [COLOR="DarkOrange"]if(reason==DLL_PROCESS_ATTACH)
    {
        MessageBoxA(NULL, "Erfolgreich!", "Injection by ;D", MB_OK);
        CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)Hack, NULL, NULL, NULL);
    }[/COLOR]
    return true;
}
Rotes ist falsch, orangenes nicht ganz in Ordnung:

Statt memcpy kannst du für Werte, die die Größe von vier Bytes nicht überschreiten, einfach Pointer nutzen:

Code:
*(int*)Addy = t;
Ein Thread hat den Typ DWORD WINAPI und nicht void.
Code:
void Hack()
solltest du also nicht nutzen, um einen Thread zu erstellen.

Wenn du einen Thread beim injecten erstellst, solltest du ihm beim ejecten wieder beenden, damit das Programm nicht crasht. (Falls man die Möglichkeit haben soll, die Dll wieder rauszuholen; außerdem ist es für Tests der Dll auch praktisch, wenn man nicht immer das Programm neustarten muss, weil ejecten nicht möglich ist.)

Schlussendlich eine Antwort auf deine letzte Frage:

Quote:
Nächste Frage : wenn meine addy char ist kann ich dann auch int addy nehmen oder muss ich da char/connest char* nehmen.
1. heißt es const char, was Moeps Post untermauert, dass du die Sprache nichtmal kannst (das ist nicht das einzige, was seinen Post belegt)
2. Eine Adresse kann nicht int oder sonst was sein, eine Adresse ist eine Adresse. Was an dieser Adresse steht, ist dem Compiler scheißegal.

Du kannst also so etwas machen:

Code:
int x;
char *z = (char*)&x;
*z = 10;
Danach wird x den Wert 10 haben, als hättest du es x direkt zugewiesen oder einen int Pointer benutzt.
Die Datentypen sind nur für den Programmierer wichtig, damit er nicht durcheinander kommt, Pointer haben aber generell die gleiche Größe und es ist demnach völlig egal, welchen Typ die Variable eigentlich haben sollte, auf die er zeigt, die Wirkung am Ende im Programm ist die gleiche.
Der Compiler unterscheidet da nur, damit du nicht aus Versehen int Werte in Strings schreibst o.Ä..
MrSm!th is offline  
Thanks
3 Users
Reply


Similar Threads Similar Threads
[c++] memcpy, float, address
07/21/2010 - Kal Online - 0 Replies
omfg, how to write float value using memcpy? DWORD addr = 0x12345678; FLOAT value = { 100, 200, 300 }; memcpy((void*)addr, (void*)((FLOAT)value),4); gives me an engine crash. EDITED: problem solved. nvm lol. please, delete this thread.



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


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