gpt4 book ai didi

c++ - 使用不同偏移量加载的 VS 2010 和 VS 2005 生成的 Exe

转载 作者:行者123 更新时间:2023-11-30 03:07:38 25 4
gpt4 key购买 nike

VS 2005 和 VS 2010 加载过程镜像文件不同

我们有一个后期构建步骤,可以修改(修补)可执行文件中的某些位置。修补进程使用 CreateProcess 将进程加载到内存中,并使用 ReadProcessMemory 读取其代码段内存。然后在内存中搜索一个序列 0x8D, 0x05, XX, XX, XX, XX, MAGIC ,并在相应的偏移量上修改文件以包含不同的代码。文件中的偏移量计算为进程内存空间中的指令地址减去 exe 的首选加载地址。 exe 标记为/BASE:"0x400000"/DYNAMICBASE:NO/FIXED(无地址随机化,无重定位)。

使用 VS 2005 生成的可执行文件工作正常,但是当使用 VS 2010 构建 exe 时失败。找到内存中的序列,但相应偏移处的文件内容不匹配。查找二进制文件,可以在文件前面的0xc00找到对应的代码。

比较命令行时,我可以看到有 /OPT:WIN98用于 VS 2005,VS 2010 缺少它,似乎是 not to be supported by the linker any more .

加载由 VS 2010 构建的可执行文件

现在我的问题是:

  • 这个 0xc00 偏移量从何而来?
  • 或者,如果我认为进程是通过将 exe 文件的内容读入由加载地址定义的内存来加载的,那是错误的或过于简单化了,是否有一些文档详细说明了进程是如何加载到内存中的(如果可能,包括处理像/OPT:WIN98 或/SWAPRUN 这样的标志?

最佳答案

用/OPT:WIN98 生成的 exe 似乎有一个稍大的标题(对齐到 4 KB)。当不指定该标志时,代码仍然从0x401000开始加载,但是header只是0x400而不是0x1000,导致图像偏移为0xc00。

关于c++ - 使用不同偏移量加载的 VS 2010 和 VS 2005 生成的 Exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5715851/

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