первый вопрос о форматах файлов
есть такая директива format
MZ — 16-битный формат, основной формат файлов .EXE в DOS.
NE — 16-битный формат, использовался в Windows 3.x[2], OS/2 и MS-DOS
LE — смешанный 16- и 32-битный формат, ранее использовался в OS/2 и Windows (VxD).
LX — 32-битный формат, используется в OS/2.
PE — 32- и 64-битный формат, используется в современных версиях Windows начиная с Windows NT и Windows 95.
COFF, MS COFF, MS64 COFF — объектные файлы.
ELF, ELF64 — исполняемые файлы в UNIX-подобных системах.
ARM — разработка энтузиастов, можно найти на официальном форуме.
Binary — файлы произвольной структуры. Указав смещение 100h (org 100h), можно получить исполняемый файл формата .COM. Также, с помощью format binary можно компилировать файлы данных.
вроди бы всё просто пишешь формат и компилтся тот файл который нужен,
но оказывается что всё савсем не так, эта директива меняет всю структуру построения программы
к примеру, если мы пишем такой формат
Code:
format PE GUI 4.0 DLL at 7000000h on 'stub.exe'
то нам надо ещё вставлять секшансы
Code:
section '.text' code readable executable
section '.reloc' data discardable fixups
section '.rsrc' data readable resource from 'my.res'
и хрен его знает какой синтаксис у этих директив
и что это означает
если пишем
Code:
format COFF
то унас добавляются ещё какие то директивы
Code:
extrn exit
extrn '__imp__MessageBoxA@16' as MessageBox:dword
public main
public start as '_start'
с MZ более менее обьеснено segment, entry, stack, heap
только вот как пользовать эти сегменты ?
как сегменты распределюутся по процессору?
для чего они нужны?
какие у них ограничения?
следующий вопрос по дерективе org
что это за директива, что она делает, почему разные значения этой директивы формируют разнае форматы файлов
что самое интересно если поставить org 100h и запустит .com программу с dos(именно dos не MS-DOS)
то можете забыть про сегментные регистры вообще они нахрен не работают
директивы use16 use32 use64
что эти дерективы делают на сколько мне известно
команды 32 это те же самые комманды что и 16 только дополненые
комманды 64 это уже другие команды
скажите когда и как эти дерективы использовать и что они в конце концов делают
директива alpha
что это за директива что она делает, что означает
переменные
директивы struc, virtual
на сколько я понал эти директи создают вирлуальную модельданнах
то есть у меня есть переменная f_string db 256 dup(0)
в ней первые 4 байта что то означают
потом ещё 2 байта что то означают
потом 8 байт что то означают
и так далее
и для того чтобы я не делал лишних действий
Code:
mov bx, f_string
add bx, 4
для того что бы определить адрес нужных данных
мне нужно использовать эти директивы
только вот они не работают если использовать документацию
скажите как мне эти дерективы использовить, для того чтобы грамотно организовать даннае?