6681 / 2664 / 366
Регистрация: 17.02.2013
Сообщений: 3,907
1

Какой компоновщик для DOS-16 делает заголовок EXE-файла с пустой таблицей перемещения в два параграфа

19.04.2015, 13:25. Показов 1349. Ответов 10
Метки нет (Все метки)

Такой вот вопрос. Какой компоновщик для DOS-16 делает заголовок EXE-файла с пустой таблицей перемещения в два параграфа, а не в 200h байт, как это делает тот TLINK, что у меня сейчас под рукой. Потребовалось тут пару утилит консольных написать для работы и по неизбежности именно в виде EXE-файлов. А я привык код оптимизировать по размеру и удовольствие от этого получать и EXE-заголовок MZ-файла в 200h байт меня просто бесит.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2015, 13:25
Ответы с готовыми решениями:

Текст книги состоит из трех глав по четыре параграфа (два уровня иерархии). Текст параграфа - любой. Создать оглавление книги.
Помогите пожалуйста!!! я прошу прощения у админов,но очень нужно сдать экзамен!! но я лохушка в...

Заголовок компилируемого C++Builder6 exe-файла
Всем здравствуйте. Заголовок компилируемого C++Builder6 exe-файла == заголовку проекта. Русские...

Как отличать Dos 16 Exe от Dos 32 Exe
Давно уже интересовал вот этот вопрос как именно отличать Dos 16 Exe от Dos 32 Exe. Если я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ушел с форума
Автор FAQ
15523 / 7345 / 962
Регистрация: 11.11.2010
Сообщений: 13,258
20.04.2015, 03:21 2
Ethereal,
FASM DOS-заголовок - 32 байта
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
; fasm dos exe #
format MZ
 
start:    mov ax,cs
      mov ds,ax
 
      mov dx,Hello
      mov ah,9
      int 0x21
      mov ah,0
      int 0x16
      mov ah,0x4c
      int 0x21
Hello:  db 'Hello, world!$'
Миниатюры
Какой компоновщик для DOS-16 делает заголовок EXE-файла с пустой таблицей перемещения в два параграфа  
1
Ушел с форума
Автор FAQ
15523 / 7345 / 962
Регистрация: 11.11.2010
Сообщений: 13,258
20.04.2015, 08:16 3
NASM DOS-заголовок 32 байта
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
; nasm dos exe #
%define ONLY_NASM 
%include "exebin.mac"
 
      EXE_begin
      EXE_stack 64      ; demonstrates overriding the 0x800 default
 
      section .text
 
      mov ax,cs
      mov ds,ax
 
      mov dx,Hello
      mov ah,9
      int 0x21
 
      mov ax,0x4c00
      int 0x21
 
      section .data
Hello:  db 'Hello, world, from NASM-DOS-EXE!$'
 
      EXE_end
компилируется строками
Код
set filename="...."
%nasm_path%\bin\nasmw -f bin %filename%.asm -o %filename%.exe ^
-I%nasm_path%\include\NASM\
Миниатюры
Какой компоновщик для DOS-16 делает заголовок EXE-файла с пустой таблицей перемещения в два параграфа  
0
Ушел с форума
Автор FAQ
15523 / 7345 / 962
Регистрация: 11.11.2010
Сообщений: 13,258
20.04.2015, 08:30 4
Jwasm DOS-заголовок 48 байт
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
    .model small
    .stack 1024
    .data
text db 13,10,"Hello, world!",13,10,'$'
    .code
start:    mov ax, @data
    mov ds, ax
    mov ah, 09h
    mov dx, offset text
    int 21h
    mov ax, 4c00h
    int 21h
    end start
Собирается строкой
Код
JWasm -nologo -mz Dos2.asm
Миниатюры
Какой компоновщик для DOS-16 делает заголовок EXE-файла с пустой таблицей перемещения в два параграфа  
0
6681 / 2664 / 366
Регистрация: 17.02.2013
Сообщений: 3,907
20.04.2015, 09:48  [ТС] 5
Это все здорово, спасибо огромное за информацию. Но это все какие-то ассемблеры с компоновщиками в одном флаконе, как я понимаю. Типа, вещи в себе. А я спрашивал не попадался ли кому отдельный компоновщик с такими свойствами. Чтобы из OBJ файла собирал EXE с минимальным заголовком. Вдруг такие есть.
0
Ушел с форума
Автор FAQ
15523 / 7345 / 962
Регистрация: 11.11.2010
Сообщений: 13,258
20.04.2015, 10:12 6
а стандартные линкеры: link, polink, tlink, alink, wlink как раз и соберут "типовой" заголовок в 200h от которого Ethereal хотел бы отделаться
отсюда мораль, создать bin-файл и приделать к нему свой заголовок
0
6681 / 2664 / 366
Регистрация: 17.02.2013
Сообщений: 3,907
20.04.2015, 10:52  [ТС] 7
Не а. Мораль - написать утилитку, которая укорачивает заголовок у EXE-файла. Чем сейчас и займусь, бо время есть. Ибо хочется работодателю как бы между прочим в глаза пыль пустить. Чтобы производило впечатление. Люблю я это дело.
0
3402 / 1821 / 489
Регистрация: 28.02.2015
Сообщений: 3,699
20.04.2015, 23:00 8
Ethereal
Внимательно изучите заголовок MZ-файла. Меньше чем 1Bh, Вы не сможете сделать заголовок(это требование системного загрузчика), а это почти 32-а байта, т.е. какой смысл напрягатся(из-за 4-х байт)=(всё меряется параграфами и выравнивается на 16 любых байт). Дальше находится таблица настройки сегментов. ЕХЕ-файл, без неё никак не может, если не обойти именно её, т.е. сегмент данных, стека поместить в сегмент кода и спрятатся в 64-х килобайтах COM-файла. А ещё как довесок, comand.com(Win9х) сам по себе, тоже перестал быть COM-файлом, он с памятью играет как "шалопай".

Во всем этом мне не понятна цель Вашего проэкта, возможно "группа поддержки" Вам даст новые идеи.

И поможет сократить код до минимума.
ps: (один байт-я читал)
0
Ушел с форума
Автор FAQ
15523 / 7345 / 962
Регистрация: 11.11.2010
Сообщений: 13,258
21.04.2015, 05:01 9
Ethereal,
для построения ЕХЕ-заголовка в #3 используются макросы EXE_begin и EXE_stack из файла exebin, он во вложении, может быть пригодится, FASM строит заголовок согласно описанию в файле FORMATS.INC
Вложения
Тип файла: zip exebin.zip (14.7 Кб, 4 просмотров)
0
Ушел с форума
Автор FAQ
15523 / 7345 / 962
Регистрация: 11.11.2010
Сообщений: 13,258
22.04.2015, 04:11 10
а вдруг кому-нибудь понадобится
смещение от
начала файла
размерназваниекомментарий
+00h WORD e_magic'MZ','ZM'
+02h WORD e_cblp количество байт на последней странице файла
+04h WORD e_cp количество страниц в файле
+06h WORD e_crlc Relocations
+08h WORD e_cparhdr размер заголовка в параграфах
+0Ah WORD e_minalloc Minimum extra paragraphs needed
+0Ch WORD e_maxalloc Maximum extra paragraphs needed
+0Eh WORD e_ss начальное (относительное) значение регистра SS
+10h WORD e_sp начальное значение регистра SP
+12h WORD e_csum контрольная сумма
+14h WORD e_ip начальное значение регистра IP
+16h WORD e_cs начальное (относительное) значение регистра CS
+18h WORD e_lfarlc указатель на таблицу перемещения DOS-программы
+1Ah WORD e_ovno количество оверлеев
+1Ch WORD e_res[4] Зарезервировано
+24h WORD e_oemid OEM identifier (for e_oeminfo)
+26h WORD e_oeminfo OEM information; e_oemid specific
+28h WORD e_res2[10] Зарезервировано
+3Ch DWORD e_lfanew указатель на новый exe-заголовок
1
6681 / 2664 / 366
Регистрация: 17.02.2013
Сообщений: 3,907
22.04.2015, 09:51  [ТС] 11
>т.е. какой смысл напрягатся(из-за 4-х байт)
Когда-то давным давно мне сделала заказ одна фирма. Она написала крупное коммерческое приложение на Клиппере. Принесла заказчику и это приложение начало валиться с Divide by Zero. На быстрых компьютерах
валится, на компьютере помедленнее работает. Ну не может же фирма посоветовать заказчику поставить
компьютер помедленнее. Ну вот она и заказала мне написать утилиту, которая бы патчила клипперовские
экзешники. Так вот я тогда залудил за работу "рубль за байт", ну или какую-то сумму, за каждый байт
утилиты. Они согласились И поверь, ни рубля лишнего с них не взял. Потому-что оптимизировано было до
упора. Зато какое удовольствие было смотреть на результат своего труда. Смотрю на него и прусь.

Добавлено через 1 час 20 минут
Майкл, а вот эти дровишки откуда взялись ?
+1Ch WORD e_res[4] Зарезервировано
+24h WORD e_oemid OEM identifier (for e_oeminfo)
+26h WORD e_oeminfo OEM information; e_oemid specific
+28h WORD e_res2[10] Зарезервировано
+3Ch DWORD e_lfanew указатель на новый exe-заголовок
Не было же этого ничего в MS-DOS. Со смещения 1Ch обычно начиналась таблица перемещения. Так-что ничего по этому смещению не было зарезервировано. И остальных упомянутых полей не было. В какой спецификации они появились ?

Добавлено через 6 минут
А понял. Это поля в файлах PE есть.

Добавлено через 5 минут
И появилось они, по крайней мере e_lfanew появилось, в файлах NE. Собственно только оно и появилось в NE.
0
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru