У меня есть крючок в файле 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);
}
Изменение% d на% s приводит к сбою программы – user1698144
@ user1698144 Пара причин для этого. Один из ошибок, который капитан Жираф указывает в своем ответе, а другой - это функции '_s' по умолчанию, чтобы прервать программу, если вход плохо, а не пытаться хромать после неопределенного поведения. У вас есть две ошибки, а не одна. – user4581301
Ну, единственная цель программы - найти это значение. После выполнения исправления Griaffe, msgbox делает вывод, но все это gibberish.Looks, как один и тот же китайский символ повторяется снова и снова – user1698144