加载程序是否重写机器代码中的绝对地址?
Does the loader rewrite absolute addresses in machine code?
假设我有以下内容:
首选项。 0x40000 的图像基础和正在使用 ASLR 的事实。
如果我说翻译会像这样完成,我是否正确:
(OG)
0004232f 8b 45 00 MOV EAX,dword ptr [EBP]
00042332 a3 64 00 6C 00 MOV [006C0064],EAX
00042337 8b 45 04 MOV EAX,dword ptr [EBP + 0x4]
(After ASLR)
0066232f 8b 45 00 MOV EAX,dword ptr [EBP]
00662332 a3 64 20 72 00 MOV [00722064],EAX
00662337 8b 45 04 MOV EAX,dword ptr [EBP + 0x4]
还有什么我忽略的可以改变加载时的字节顺序吗?
在 32 位 Windows 中,所有 DLL
文件和许多(但不是全部)EXE
文件都有一个 so-called“基本重定位 Table” .
此 table 包含文件中包含的所有绝对地址的列表。
在您的示例中,有一个绝对地址 (0x006C0064
) 存储在地址 0x00042333
。
table 将包含一个条目,说明在 0x00042333
处存储了一个绝对地址。
当executable文件或动态库加载到其他地址时,加载器确实会“重写”所有这些地址。
然而,“重写”是一个非常简单的操作:只需将一个固定值添加到所有这些地址即可。
请注意,这个概念与Linux和其他操作系统使用的概念完全不同。
假设我有以下内容:
首选项。 0x40000 的图像基础和正在使用 ASLR 的事实。
如果我说翻译会像这样完成,我是否正确:
(OG)
0004232f 8b 45 00 MOV EAX,dword ptr [EBP]
00042332 a3 64 00 6C 00 MOV [006C0064],EAX
00042337 8b 45 04 MOV EAX,dword ptr [EBP + 0x4]
(After ASLR)
0066232f 8b 45 00 MOV EAX,dword ptr [EBP]
00662332 a3 64 20 72 00 MOV [00722064],EAX
00662337 8b 45 04 MOV EAX,dword ptr [EBP + 0x4]
还有什么我忽略的可以改变加载时的字节顺序吗?
在 32 位 Windows 中,所有 DLL
文件和许多(但不是全部)EXE
文件都有一个 so-called“基本重定位 Table” .
此 table 包含文件中包含的所有绝对地址的列表。
在您的示例中,有一个绝对地址 (0x006C0064
) 存储在地址 0x00042333
。
table 将包含一个条目,说明在 0x00042333
处存储了一个绝对地址。
当executable文件或动态库加载到其他地址时,加载器确实会“重写”所有这些地址。
然而,“重写”是一个非常简单的操作:只需将一个固定值添加到所有这些地址即可。
请注意,这个概念与Linux和其他操作系统使用的概念完全不同。