Addresse eines mov befehls bekommen



  • Hallo, habe in einem programm diesen befehl hier:

    24086AB4     A3 04CA3B24         MOV DWORD PTR DS:[243BCA04],EAX
    

    Nun möchte ich gerne die addresse in die eax gemoved wird bekommen.

    Hatte es mal so probiert, scheint aber nicht zu funktionieren..

    DWORD GetMovAddress(void* pdwAddress)
    {
    	PBYTE pbAddress = (PBYTE)pdwAddress; // change to pbyte so we can easily skip the opcode
    	pbAddress++; // skip it..
    
    	DWORD dwAddress;
    	memcpy( (void*)&dwAddress, pbAddress, 4 ); // copy the address
    	return dwAddress;
    }
    
    Kann mir einer sagen, was ich falsch mache?  :)
    


  • Vermutlich übergibst du die falsche Adresse an GetMovAddress...



  • hustbaer schrieb:

    Vermutlich übergibst du die falsche Adresse an GetMovAddress...

    Ich denke nicht, ich calle GetMovAddress so:

    stringstream log;
    log << GetMovAddress( (void*)0x24086AB4 ) << endl;
    add_log( log.str() );
    

    geloggt wird:

    607898116 💡

    Noch einer eine Idee?



  • unsigned long GetMovAddress(void* pdwAddress)
    {
        unsigned long* pbAddress = (unsigned long*)pdwAddress;
        return (unsigned long )(++pbAddress);
    }
    


  • s91x schrieb:

    hustbaer schrieb:

    Vermutlich übergibst du die falsche Adresse an GetMovAddress...

    Ich denke nicht, ich calle GetMovAddress so:

    stringstream log;
    log << GetMovAddress( (void*)0x24086AB4 ) << endl;
    add_log( log.str() );
    

    geloggt wird:

    607898116 💡

    Noch einer eine Idee?

    Und was passt dir an 607898116 (<- dezimal!) nicht? Rechne das mal in Hex um, und vergleich es mit dem was zwichen den [] steht...

    Falls du dich wunderst warum die Adresse 0x243BCA04 in der Byte-Sequenz "A3 04CA3B24" byteweise "gespiegelt" steht: Intel CPUs speichern das nunmal so ab, nennt sich Little-Endian.


Log in to reply