所以最近我一直在處理WinAPI的WriteProcessMemory
和ReadProcessMemory
,它們都以LPVOID
作爲它們的第二個參數,它是我們要讀取的另一個進程的內存中的實際地址。C++整數到指針轉換
考慮到,將這個整數指針轉換是正確的C++代碼(沒有未定義的行爲等):
#include <windows.h>
int main()
{
WriteProcessMemory(/*...*/,
//want to read from memory address 0x1234 in the target process
reinterpret_cast<void*>(static_cast<uintptr_t>(0x1234)),
/*...*/);
return 0;
}
AFAIK,標準說uintptr_t
是整數類型,其能夠保持沒有改變指針值的指針。由於它是一個整數,我應該能夠在其中存儲0x1234。該標準還規定reinterpret_cast
uintptr_t
到void*
也將保持不變。
如果我們無視我通常使用WinAPI或Windows,'reinterpret_cast(static_cast (0x1234))'仍然是將整數轉換爲void *的正確標準方法嗎? –
Tuntuni
這取決於你如何獲得指針值。如果你有一個指針,並執行'reinterpret_cast(static_cast (p))'然後輸出值 - 那麼是的。 –
bbonev
如果我有一個整數'我'並做'reinterpret_cast(static_cast (i))'? –
Tuntuni