Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 12:58

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

Advertisement



[C++] Write to a Pointer

Discussion on [C++] Write to a Pointer within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Aug 2009
Posts: 127
Received Thanks: 27
[C++] Write to a Pointer

Nabend liebe Epvp-Community,

ich schreibe ja wie manche wissen einen Bot für Eden Eternal.
Leider hat sich die Movement-Funktion seit dem Update geändert und lässt das direkte aufrufen nicht zu wegen dem Stack.
Nun will ich den Wert auf die Addresse schreiben und dann in die Read->Check->Move-Function springen.
ich habe mir eine Funktion erstellt um einen Pointer auszulesen
Code:
DWORD ReadPointer(DWORD offsets[])
{
    DWORD Result = 0;
    int size = sizeof(offsets) / sizeof(DWORD);
    Result = *(DWORD*)(GetBase("_Launcher.exe",GetCurrentProcessId()) + offsets[0]);
    for(int i = 1; i != size; i++)
    {
        Result = *(DWORD*)(Result + offsets[i]);
    }

    return Result;
}
Nur wie beschreibe ich jetzt die Addresse? stehe gerade aufm Schlauch
theredvex is offline  
Old 03/14/2012, 20:46   #2
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,344
Genau so wie du sie ausließt, nur dass du natürlich was links und rechts von dem =-Operator steht vertauschst.
ms​ is offline  
Old 03/14/2012, 20:54   #3
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
in etwa so:
Code:
void ReadPointer(DWORD offsets[], DWORD val)
{
    DWORD Result = 0;
    int size = sizeof(offsets) / sizeof(DWORD);
    Result = *(DWORD*)(GetBase("_Launcher.exe",GetCurrentProcessId()) + offsets[0]);
    for(int i = 1; i != size; i++)
    {
       if(i == size)
            *(DWORD*)(Result + offsets[i]) = val;
       else
            Result = *(DWORD*)(Result + offsets[i]);
    }
}
jacky919 is offline  
Old 03/14/2012, 21:01   #4
 
elite*gold: 0
Join Date: Aug 2009
Posts: 127
Received Thanks: 27
Code:
if(i == size)             *(DWORD*)(Result + offsets[i]) = val;
ist unsinn ich muss ja erst die Endaddresse haben
theredvex is offline  
Old 03/14/2012, 21:06   #5
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Quote:
Originally Posted by theredvex View Post
Code:
if(i == size)             *(DWORD*)(Result + offsets[i]) = val;
ist unsinn ich muss ja erst die Endaddresse haben
haste ja, wenn i == size ist
jacky919 is offline  
Old 03/14/2012, 21:14   #6
 
elite*gold: 0
Join Date: Aug 2009
Posts: 127
Received Thanks: 27
dann könnt ich das doch genau so gut hinter die Schleife schreiben oder nicht?
theredvex is offline  
Old 03/14/2012, 21:19   #7
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Quote:
Originally Posted by theredvex View Post
dann könnt ich das doch genau so gut hinter die Schleife schreiben oder nicht?
Du müsstest dir dir resultierende Adresse irgendwie merken. Dann würde das theoretisch auch funktionieren.
jacky919 is offline  
Old 03/14/2012, 22:17   #8
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,344
Quote:
Originally Posted by theredvex View Post
Code:
int size = sizeof(offsets) / sizeof(DWORD);
Das hier macht übrigens nicht das was du erwartest. sizeof offsets ist immer 4 Bytes in einem 32-Bit-System bzw. 8 Bytes bei 64-Bit groß, da es ein Pointer ist.
Du musst die Länge des Arrays als ein weiteres Argument an deine Funktion weitergeben.

Musst du in der For-Schleife nicht auch bei i = 0 anfangen?
ms​ is offline  
Old 03/14/2012, 23:52   #9


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Originally Posted by Metin2Spieler97 View Post
Das hier macht übrigens nicht das was du erwartest. sizeof offsets ist immer 4 Bytes in einem 32-Bit-System bzw. 8 Bytes bei 64-Bit groß, da es ein Pointer ist.
Du musst die Länge des Arrays als ein weiteres Argument an deine Funktion weitergeben.

Musst du in der For-Schleife nicht auch bei i = 0 anfangen?
Doch wird es, der Compiler merkt sich die Größe selbst, es ist ein Array und kein Pointer, da zieht ein Compiler eine ganz klare Grenze.
Die Größe ist zwar der Funktion nicht bekannt, aber an der Stelle, an der du das Array definierst und das merkt sich der Compiler.
Alternativ ginge auch das Makro ARRAYSIZE, welches direkt die Anzahl der Elemente ausgibt.
MrSm!th is offline  
Old 03/15/2012, 06:30   #10
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Wobei man in gutem C++ std::vector nehmen würde.
jacky919 is offline  
Old 03/15/2012, 15:38   #11
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,344
Quote:
Originally Posted by MrSm!th View Post
Doch wird es, der Compiler merkt sich die Größe selbst, es ist ein Array und kein Pointer, da zieht ein Compiler eine ganz klare Grenze.
Die Größe ist zwar der Funktion nicht bekannt, aber an der Stelle, an der du das Array definierst und das merkt sich der Compiler.
Alternativ ginge auch das Makro ARRAYSIZE, welches direkt die Anzahl der Elemente ausgibt.
char *c und char c[] sind als Parameter genau das selbe.
ms​ is offline  
Old 03/15/2012, 15:40   #12
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Quote:
Originally Posted by Metin2Spieler97 View Post
char c* und char c[] sind als Parameter genau das selbe.
Nein, das Makro ARRAYSIZE würde beispielsweise nicht mehr funktionieren.
jacky919 is offline  
Old 03/15/2012, 15:52   #13
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,344
Quote:
Originally Posted by jacky919 View Post
Nein, das Makro ARRAYSIZE würde beispielsweise nicht mehr funktionieren.
Dann ist das wohl eine Eigenart von Visual C++.
ms​ is offline  
Old 03/15/2012, 15:54   #14
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Das Makro sollte auch mit anderen Compilern funktionieren.
jacky919 is offline  
Old 03/15/2012, 16:03   #15
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,344
Code:
#include <iostream>

void f(char c[]);

int main(int argc, char *argv[])
{
    char c[] = "1234567890";
    std::cout << sizeof c << std::endl;
    f(c);
}

void f(char c[])
{
    std::cout << "inside function: " << sizeof c << std::endl;
}
Sollte bei jedem Compiler 11 und 4 bzw. 8 ausgeben.
Das ARRAYSIZE-Makro macht auch nicht viel anderes als sizeof zu benutzen.
ms​ is offline  
Reply


Similar Threads Similar Threads
Please write Pointer
08/27/2010 - 4Story - 9 Replies
Please write the table cheat in Cheat Engine for here this 4story Welcome to 4story Online
Frage: Wie findet man zB UG Pointer?Speed pointer?
03/30/2010 - Kal Online - 2 Replies
kann mir einer sagen wie man UG/Speed pointer finden kann usw^^´ß#



All times are GMT +2. The time now is 12:58.


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.