Как уменьшить размер таблицы перемещения файлов DOS .exe с помощью компоновщика OpenWatcom? - PullRequest
0 голосов
/ 20 июня 2020

Я создал следующий файл .exe DOS с помощью OpenWatcom:

$ 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 ... 0x1 c: Заголовок DOS .exe.
  • 0x1 c ... 0x20: 4 байта заполнения.
  • 0x20 ... 0x24: 4 байта, содержащие 1 запись о перемещении.
  • 0x24 ... 0x30 : 12 байтов заполнения.
  • 0x30 ...: сегмент кода (_TEXT) с 16-битным машинным кодом 8086.
  • ...

Как сделать Я избавляюсь от 4 байтов заполнения и 12 байтов заполнения, чтобы код начинался со смещения 0x20? Есть ли для этого флаг WLINK? Стоит ли использовать другой компоновщик? Должен ли я постобработать сгенерированный .exe?

1 Ответ

0 голосов
/ 10 июля 2020

Мне не удалось найти вариант конфигурации для этого, поэтому я написал свой собственный компоновщик и использовал его вместо WLINK. Таким образом, заголовок .exe стал всего 24 (0x18) байта, и мне не потребовалось никаких перемещений.

...