关于DOS EXE头中的重定位表

发布于 2024-09-25 02:53:30 字数 321 浏览 5 评论 0 原文

alt text

从上面我们可以看到重定位表条目数0< /code>(没有 reloc 项),但是第一个 reloc 项的偏移表明 reloc 项确实存在。

DOS EXE 头的定义在这里

怎么理解呢?

alt text

From the above we can see count of relocation table entries is 0(there is no reloc item), but offset of first reloc item shows that the reloc item actually exists.

The definition of DOS EXE Header is here.

How to understand it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

似梦非梦 2024-10-02 02:53:30

这是正常的。对于像 PE 这样的现代格式,即使重定位项为零,重定位表的偏移量始终为 0040H。

This is normal. For modern formats like PE, the offset to the relocation table is always 0040H, even if there are zero relocation items.

渡你暖光 2024-10-02 02:53:30

您必须查看 EXE 标头大小(屏幕截图中显示为 DOS_HdrSize )。这是整个标头使用的段落数(16 字节块)。

在您的示例中,它是 0x0004,因此将其乘以 16,您将得到 0x40 字节的标头长度。重定位表从重定位表偏移量开始,一直到 DOS_ReloCnt 条目,直到标头末尾。

在您的情况下,重定位表偏移量是 0x40 并且标头的末尾也是 0x40 因此没有空间用于重定位表,这也是因为 >DOS_ReloCnt 表示其中有零个条目。

在这种情况下,重定位表偏移量设置为什么值可能并不重要。

You have to look at the EXE header size (shown as DOS_HdrSize in your screenshot). This is the number of paragraphs (16-byte blocks) that the whole header uses.

In your example it is 0x0004 so multiply it by 16 and you get the header length as 0x40 bytes. The relocation table starts at the relocation table offset and continues for DOS_ReloCnt entries until the end of the header.

In your case the relocation table offset is 0x40 and the end of the header is also 0x40 thus there is no room for the relocation table, which is just as well since DOS_ReloCnt says there are zero entries in it.

In this case it probably does not matter what value the relocation table offset is set to.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文