将字节转换为具有正确地址的操作码的简单方法

问题描述 投票:0回答:1

我刚刚找到二进制签名,并且我得到了搜索签名的正确地址。 但是,我想从那里获取地址并在我的程序中使用它。

示例。 (在 C8092 中找到签名)

binary.exe+C80A3 - 8B 0D 5090E702        - mov ecx,[binary.exe+2A19050]

我想要 DWORD 形式的“0x2A19050”。 有什么办法可以轻松取出这个地址吗? C++。

我希望 DWORD 形式的正确地址。

c++ assembly binary hex
1个回答
0
投票

在表达式

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。

© www.soinside.com 2019 - 2024. All rights reserved.