操作系统如何更改进程的虚拟基址?

问题描述

澄清一下,我的具体困惑集中在这一个事实,即 PE 可执行文件中的所有指令都是在假设基映像地址为 = 00400000 的情况下编写的。但是,在调试可执行文件时,所使用的地址会适应决定的任何基映像地址在运行时。

我在一个不同于认的基础镜像上打开了一个简单的进程:

Process base image address

然后运行调试器并记录了一个简单函数调用

SimpleFunctionCall

调用指向一个指针,该指针从基图像地址 (930000 + B0F4) 偏移了 B0F4。 B0F4 指针是指向包含正在使用的函数的 dll 的 IAT。

IATPointer

我的困惑是,调用该特定地址的指令如何,该地址使用 930000 作为基地址。这个基地址是在运行时决定的。

查看 PE 文件中的相同指令时,会进行相同的调用,但使用认地址。

InstructionInFile

B0F4 偏移量应用于 00400000。

windows 是如何做到这一点的。有没有硬件解决方案?某种指令决定所有进一步的指令以偏移量运行?或者,听起来很荒谬,操作系统是否以某种方式识别所有使用的地址并根据新的图像库更改它们

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)