gpt4 book ai didi

c++ - ReadProcessMemory 向后读取内存?

转载 作者:行者123 更新时间:2023-11-30 03:04:19 29 4
gpt4 key购买 nike

当使用 ReadProcessMemory 读取可执行文件的内存时,我得到的前两个字节是颠倒的。代码是:

SIZE_T dataRead;
PIMAGE_DOS_HEADER dosHeader = (PIMAGE_DOS_HEADER) malloc(1);
ReadProcessMemory(process, (LPVOID)addr, dosHeader, 2, &dataRead);
printf("%x\n", dosHeader->e_magic);

以上输出 5A4D 而不是 4D5A。为什么会这样?可以是字节序吗?

提前致谢。

最佳答案

是的,这是由于字节序。文件中的第一个字节是0x4d,第二个字节是0x5a。当您使用 %x 打印它们时,它们被解释为小端数字,因此在打印它们时会交换字节。作为一个独立的示例,请考虑以下程序:

#include <cassert>
#include <cstdio>

int main()
{
assert(sizeof(unsigned) == 4);

char bytes[4] = { 0x12, 0x34, 0x56, 0x78 };
std::printf("%x\n", *reinterpret_cast<unsigned const*>(bytes));
}

在采用小端字节序的系统上,输出将为 78563412。 (此示例程序忽略了潜在的对齐问题;因为您使用的是 Visual C++,所以不会有任何问题。)

另请注意,您超出了单字节分配(您 malloc(1) 但读取了两个字节)。

关于c++ - ReadProcessMemory 向后读取内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8716250/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com