首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么重定位表的所有元素都有额外的偏移量?

为什么重定位表的所有元素都有额外的偏移量?
EN

Stack Overflow用户
提问于 2022-08-07 12:24:39
回答 1查看 91关注 0票数 0

问题是如何将可移植的可执行映像加载到随机地址。

让我们以kernel32.dll为例,加载在0x75A00000。

我可以看到,在偏移量从图像0x10e15,有一个汇编程序指令,这取决于图像的位置。

地址: 75A10E13字节: 8B 35 18 03 AE 75命令: MOV ESI,DWORD PTR DS:75AE 0318

结果是,通过启动可执行文件,我们必须告诉系统我们需要重新定位到这个地址。

系统查看可执行文件中的重新定位表,并看到以下内容:基重定位表

要获得要移动的第一个元素的绝对地址,我执行以下操作:将虚拟地址添加到图像的地址,然后将块的第一个元素添加到结果数字中。

0x75A00000 + 0x10000 + 0x3E15 = 75A10E15

这是一个不错的数字,但总是比我预期的多0x3000。我只要减去0x3000就行了。请帮我找到答案,x86的0x3000从哪里来?

EN

回答 1

Stack Overflow用户

发布于 2022-08-07 15:20:18

可移植可执行文件中的重新定位在文件链接时得到解决。您所指的基重定位表有一个不同的功能:当PE无法在链接器(通常是0x0040_0000 )指定的首选ImageBase地址加载时,它由Windows使用。MS附带的动态加载库链接到每个核心DLL的ImageBase地址不同,并且选择不与其他库合并,因此导入通常的库组合的可执行文件不必重新定位它们。

您误解了基地搬迁段 .reloc的格式。遵循PageRVA和BlockSize的16位单词PageRVA和BlockSize的基重定位类型以编码,四个最重要的位

例如,转储0x3E15中的第一个TypeOrOffset条目具有IMAGE_REL_BASED_HIGHLOW (3)和偏移量0x0E15,这是要添加到PageRVA中的数字。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73267391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档