簡體   English   中英

C ++ / CPP讀取添加的十六進制地址

[英]C++/CPP Reading an added hex address

我對CPP還是比較陌生,但是找不到任何有問題的消息源。 我的IDE是MSVC 2017 Preview,我想要的結果是將兩個十六進制地址加在一起,然后讀取地址的值。 我不確定為什么,但是在添加十六進制數字時效果不佳。 我給你我當前的例子:

int number;
ReadProcessMemory(pHandle, (void*)(0x37c90000 + 0xE29FE8), &number, sizeof(number), 0);
std::cout << number << " for " << std::hex << (0x37c90000 + 0xE29FE8) << std::endl;

ReadProcessMemory(pHandle, (void*)(0x38ab9fe8), &number, sizeof(number), 0);
std::cout << number << " for " << std::hex << (0x38ab9fe8) << std::endl;

std::cout << "a = " << (0x37c90000 + 0xE29FE8) << std::endl;
std::cout << "b = " << (0x38ab9fe8) << std::endl;

我預計此代碼的結果將是,兩個ReadProcessMemory應該獲得完全相同的值,但是只有第二個ReadProcessMemory(具有已添加的十六進制值)可以正確返回。

此外,提示A和B報告的地址完全相同 如果是這樣,為什么ReadProcessMemory會發脾氣並在第一個ReadProcessMemory上報告負數?

這是上面代碼的結果:

-331287296 for 38ab9fe8
ec40f500 for 38ab9fe8
a = 38ab9fe8
b = 38ab9fe8

抱歉,我真的不知道為什么它們在任何方面都不同。

沒有,這似乎是正確的。 0xec40f500是十進制帶符號的值-331287296的無符號十六進制表示-331287296 請了解負數的二進制補碼表示。

我相信問題是std::hex 操縱器 ,它很 如果在第二種情況下使用std::dec兩個數字都將顯示為十進制:

// Second output
std::cout << std::dec << number << " for " << std::hex << (0x38ab9fe8) << std::endl;
//           ^^^^^^^^
// Display *all* following numbers as decimal

或在第一個輸出中使用std::hex

// First output
std::cout << std::hex << number << " for " << (0x37c90000 + 0xE29FE8) << std::endl;
//           ^^^^^^^^
// Display *all* following numbers as hexadecimal

當然,如果您希望number不帶符號,則在定義變量時需要明確說明。 也許您會更容易看到0xec40f500無符號十進制值3963680000之間的連接?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM