我刚刚找到二进制签名,并且我得到了搜索签名的正确地址。 但是,我想从那里获取地址并在我的程序中使用它。
示例。 (在 C8092 中找到签名)
binary.exe+C80A3 - 8B 0D 5090E702 - mov ecx,[binary.exe+2A19050]
我想要 DWORD 形式的“0x2A19050”。 有什么办法可以轻松取出这个地址吗? C++。
我希望 DWORD 形式的正确地址。
在表达式
binary.exe+C80A3
中,C80A3
是距文件开头的偏移量。 因此,您需要寻求该偏移量:
std::ifstream binary_file("binary.exe", std::ios::binary);
if (!binary_file)
{
std::err << "Error opening binary.exe\n";
exit(FAILURE);
}
binary_file.seekg(0xC80A3);
现在您需要读取操作码字节:
{
uint8_t opcode_1;
uint8_t opcode_2;
opcode_1 = binary_file.get();
opcode_2 = binary_file.get();
}
此时文件应该定位到该地址了。
uint32_t address;
binary_file.read(static_cast<char *>(&address), sizeof(address));
现在只需将地址转换为您
DWORD
输入:
DWORD location = (DWORD) address;
注意:这假设文件和您的平台具有相同的 Endianess。