2
我一直在尋找了一段時間,並沒有找到如下問題的合適的答案:C++ GetProcAddress的64位返回的32位地址
我注入DLL到目標進程,而DLL裏面,我打電話導出的功能,解決我希望收到我打電話GetProcAddress的如下:
FARPROC funcAddr =
GetProcAddress(GetModuleHandle("target.dll"), "exportedFunc")
調用成功,我檢索地址並且GetLastError()爲0,很明顯。
但它只是地址的16字節十六進制表示(如「0xAB4285B9」),但我需要它爲32字節的十六進制表示,因爲我缺少前8個字節(例如7FF8,完整地址會然後是「0x7FF8AB4285B9」)
它只是一個演示文稿/格式問題還是我需要調用另一個函數來得到我想要的?
我喜歡顯示的信息:
WCHAR buffer[256];
swprintf_s(buffer, 32, L"%X", funcAddr);
MessageBox(NULL, buffer, L"Address", MB_OK);
我感謝所有幫助。
對不起,對於非代碼格式,我在這裏使用我的手機的網頁瀏覽器。
格爾茨
在Windows中,「long」總是32位,即使在64位Windows中也是如此。爲什麼不要求一個指針值的表示。無論如何,當你對比特和字節感到困惑時,就像你看起來那樣,然後DLL注入並不是你能掌握的東西。只是一個頭。雖然探索可能很有趣。 :) –
對不起,我的意思是'int'總是32位。但是這是真的(儘管不相關),因爲我寫了一個「long」總是32位的。沒有仔細查看格式字符串。 –
首先我不知道你想說什麼long或int的大小,但是你讓我找到了「typedef int(FAR WINAPI * FARPROC)();」的定義。我明白位和字節之間的差異,迄今爲止沒有問題。我只是沒有注意到FARPROC是一個整數大小的函數指針。 我很欣賞你的提示。 – Trickzter