Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 操作系统如何改变进程;虚拟基址?_Windows_Assembly_Operating System_Portable Executable_Relocation - Fatal编程技术网

Windows 操作系统如何改变进程;虚拟基址?

Windows 操作系统如何改变进程;虚拟基址?,windows,assembly,operating-system,portable-executable,relocation,Windows,Assembly,Operating System,Portable Executable,Relocation,为了澄清这一点,我的具体困惑集中在这样一个事实上,即PE可执行文件中的所有指令都是在假定基本映像地址为=00400000的情况下编写的。但是,在调试可执行文件时,使用的地址会适应运行时确定的任何基映像地址 我在不同于默认设置的基础图像上打开了一个简单的过程: 然后运行一个调试器并记录一个简单函数的调用: 调用的指针与基映像地址(930000+B0F4)之间有B0F4偏移。B0F4指针是指向包含所用函数的dll的IAT。 我的困惑是,指令如何调用那个特定地址,它使用930000作为基址。此基址在

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

我在不同于默认设置的基础图像上打开了一个简单的过程: 然后运行一个调试器并记录一个简单函数的调用: 调用的指针与基映像地址(930000+B0F4)之间有B0F4偏移。B0F4指针是指向包含所用函数的dll的IAT。

我的困惑是,指令如何调用那个特定地址,它使用930000作为基址。此基址在运行时确定

当查看PE文件中的相同指令时,会进行相同的调用,但使用默认地址。 B0F4偏移量应用于00400000


windows是如何做到这一点的。有硬件解决方案吗?决定所有后续指令都以偏移量运行的某种指令?或者,听起来很可笑,操作系统是否以某种方式识别所有使用的地址并根据新的映像库对其进行更改

是的,操作系统确实识别并修复了所有指令。您的可执行文件中有用于此的元数据,称为重定位条目。再见,谢谢!我明白了,我已经阅读了文档,并查看了上述示例的.reloc部分,所有这些都检查出来了。该死,在这之前,这对我来说似乎是一个疯狂的解决方案,但我想这是你必须要做的。如果你想,你能写同样的东西作为答案吗,这样我就可以标记你已经回答了这个问题?