2016-10-15 17 views
0

У меня есть крючок в файле Write32 команды kernel32.dll. Крючок запускается, однако я не могу прочитать содержимое буфера.C++ Чтение значений указателя LPCVOID

Цель: Msgbox показывает содержимое буфера, отправляемого в COM-порт.

Проблема: msgbox печатает кажущуюся случайную серию чисел, которую я принимаю, является адресом памяти, а не фактическим содержимым lpBuffer.

C++ код:

void hookedFunc(HANDLE hfile, LPCVOID * lpBuffer, DWORD nNumberBytesToWrite, LPWORD lpNumberofBytesWritten, LPOVERLAPPED lpOverlapped) { 

    char *pString = reinterpret_cast<char *>(lpBuffer); 

    //Msgbox - arg 1////////////////////////////////////////////////////////////////////////////// 
    WCHAR szTest[45]; 
    swprintf_s(szTest, 45, L"%d|\n", pString); 
    MessageBox(NULL, szTest, L"BUFFER CONTENTS", MB_OK); 
    swprintf_s(szTest, 45, L"%d", nNumberBytesToWrite); 
    MessageBox(NULL, szTest, L"TEST", MB_OK); 

} 

ответ

1

LPCVOID является указателем (постоянной), lpBuffer является указателем на этот указатель. Я думаю,

const char* pString = reinterpret_cast<const char *>(*lpBuffer); 

- это то, что вы хотите.

1

В вашем примере szTest будет содержать мусор, потому что

swprintf_s(szTest, 45, L"%d|\n", pString); 

говорит интерпретировать pString как целое (благодаря %d) и преобразовать это число в ASCII и сохранить его в szTest

Так да, 'напечатайте адрес, но, возможно, только его часть.

Добавление:

ответ капитана жирафа указывает на другую ошибку: Вы смотрите в неправильном месте для строки.

+0

Изменение% d на% s приводит к сбою программы – user1698144

+0

@ user1698144 Пара причин для этого. Один из ошибок, который капитан Жираф указывает в своем ответе, а другой - это функции '_s' по умолчанию, чтобы прервать программу, если вход плохо, а не пытаться хромать после неопределенного поведения. У вас есть две ошибки, а не одна. – user4581301

+0

Ну, единственная цель программы - найти это значение. После выполнения исправления Griaffe, msgbox делает вывод, но все это gibberish.Looks, как один и тот же китайский символ повторяется снова и снова – user1698144