exe - 如何使用 OpenWatcom 链接器使 DOS .exe 重定位表更小?
问题描述
我用 OpenWatcom 创建了以下 DOS .exe 文件:
$ xxd prog.exe
00000000: 4d5a 8200 0100 0100 0300 4000 ffff 0500 MZ........@.....
00000010: 0204 0000 0000 0000 2000 0000 0000 0000 ........ .......
00000020: 0100 0000 0000 0000 0000 0000 0000 0000 ................
00000030: b804 008e d8e8 0900 b44c cd21 d1e2 01d0 .........L.!....
00000040: c353 52ba 0200 b409 cd21 ba0c 00b4 09cd .SR......!......
00000050: 21ba 0f00 b409 cd21 ba08 00b8 0700 e8db !......!........
00000060: ff89 c3ba 0a00 b809 00e8 d0ff 01d8 5a5b ..............Z[
00000070: c300 4865 6c6c 6f21 0d0a 2400 6162 0063 ..Hello!..$.ab.c
00000080: 6400 d.
地区:
- 0x0...0x1c:DOS .exe 标头。
- 0x1c...0x20:4 字节的填充。
- 0x20...0x24:4 个字节,包含 1 个重定位条目。
- 0x24...0x30:12 字节的填充。
- 0x30...:带有 16 位 8086 机器码的代码 (_TEXT) 段。
- ...
如何摆脱 4 字节的填充和 12 字节的填充,使代码从偏移量 0x20 开始?这有 WLINK 标志吗?我应该使用不同的链接器吗?我应该对生成的 .exe 进行后处理吗?
解决方案
我无法为此找到配置选项,因此我最终编写了自己的链接器并使用它而不是 WLINK。这样 .exe 标头就变成了只有 24 (0x18) 字节,我不需要任何重定位。
推荐阅读
- css - 我有一张固定的桌子。如果背景颜色:绿色,如何使边界可见?
- django - 如何使用 HTMX 和 Django 将参数传递给视图?
- html - 手机响应式设计
- android - 尝试通过电子邮件发送多个附件时出现 ActivityNotFoundException
- typescript - 是否有代表任何可迭代对象的打字稿类型
- java - 为什么我得到 ArrayIndexOutOfBoundsException?
- javascript - Discord.js mojang-api
- r - 有没有办法使用 lapply 生成由列表中列表中的元素组成的数据框?
- automated-tests - 如何在平静中检查每一步?
- linux - 安装了 Go,但找不到命令 go。可以在一个终端linux上工作