2016-10-15 8 views
0

Ich habe einen Haken im wrectfile-Befehl von kernel32.dll. Der Hook wird ausgelöst, ich kann den Pufferinhalt jedoch nicht lesen.C++ Werte des LPCVOID-Zeigers lesen

Ziel: Msgbox zeigt den Inhalt des Puffers an, der an den COM-Port gesendet wird.

Ausgabe: Die msgbox druckt eine scheinbar zufällige Reihe von Zahlen, von denen ich annehme, ist die Speicheradresse, anstelle des tatsächlichen Inhalts von lpBuffer.

C++ Code:

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); 

} 

Antwort

1

LPCVOID ist ein Zeiger (auf eine Konstante) ist lpBuffer ein Zeiger auf die Zeiger. Ich stelle mir vor

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

ist, was Sie wollen.

1

In Ihrer Probe wird szTest Müll enthalten, weil

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

pString als Integer interpretieren sagt (dank %d) und dass die ganze Zahl konvertieren, um es zu ASCII- und speichert bei szTest

Also ja Sie, drucke eine Adresse, aber möglicherweise nur einen Teil davon.

Nachtrag:

Kapitän Giraffe Antwort weist einen anderen Fehler aus: Sie sind für die Zeichenfolge an der falschen Stelle suchen.

+0

Ändern von% d zu% s führt zum Absturz des Programms – user1698144

+0

@ user1698144 Paar Gründe dafür. Einer ist der Fehler, den Captain Giraffe in seiner Antwort hervorhebt, und der andere ist die '_s'-Funktion, die standardmäßig das Programm abbricht, wenn die Eingabe schlecht ist, anstatt zu versuchen, nach undefiniertem Verhalten einzuschlafen. Sie haben zwei Fehler, nicht einen. – user4581301

+0

Nun, der einzige Zweck des Programms ist es, diesen Wert zu finden. Nach der Implementierung von Griaffes Korrektur wird die msgbox ausgegeben, aber es ist alles Kauderwelsch. Sieht aus wie das gleiche chinesische Zeichen, das immer wieder wiederholt wird. – user1698144