как вывести указатель через MessageBox? - PullRequest
0 голосов
/ 14 сентября 2011

у меня есть этот код:

extern "C" __declspec(dllexport) void getName(void)
{
    char buf[20];
    int slotNumber = 1;

    DWORD tempdw;
    DWORD hStorm_LOBBYPTR;
    hStorm_LOBBYPTR = (DWORD)GetModuleHandleW(L"Storm.dll") + 0x1000 + 0x40000 + 0x8000;


   __asm
    {
     PUSHAD
     MOV        EAX, DWORD PTR DS:[hStorm_LOBBYPTR]
     TEST       EAX, EAX
     JE         nick_false
     MOV        ECX, DWORD PTR DS:[EAX+0xC464]
     TEST       ECX, ECX
     JE         nick_false
     MOV        EAX, DWORD PTR DS:[ECX+0x170+0xB0]
     TEST       EAX, EAX
     JE         nick_false
     MOV        EDX, slotNumber
     MOV        ECX, DWORD PTR DS:[EAX+EDX*4]
     MOV        EAX, DWORD PTR DS:[ECX+0x1A0]
     MOV        ECX, DWORD PTR DS:[EAX+0x1E4]
     MOV        EAX, DWORD PTR DS:[ECX+0x1E4]
     MOV        ECX, DWORD PTR DS:[EAX+0x1E8]
     MOV        tempdw, ECX
     POPAD
     JMP        nick_true

nick_false:
     XOR        EAX, EAX
     MOV        tempdw, EAX
     POPAD
    }

    sprintf(buf,"%d", tempdw);
    MessageBox(0, buf, "Dll Injector", MB_ICONEXCLAMATION | MB_OK);

tempdw - это указатель, но когда я пытаюсь посмотреть на него, У меня есть этот вид мусора в MessageBox: screenshot pointer messagebox

Что мне делать?

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Я предполагаю, что ваша сборка перегружена чем-то (возможно, регистром), что означает, что sprintf дает сбой, а буфер просто содержит случайный шум стека.

Проверьте это, удалив сборку.

0 голосов
/ 14 сентября 2011

Найдите спецификатор печати "% p" в printf:

char temp_buffer[64];
char * p_temp_buffer = temp_buffer; // A pointer to display.
//...
sprintf(temp_buffer, "%p", (void *) p_temp_buffer);
MessageBox(0, temp_buffer, "Pointer value", MB_OK);
...