ряд вопросов по FASM
Posted: Fri Dec 16, 2011 4:28 pm
первый вопрос о форматах файлов
есть такая директива 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 можно компилировать файлы данных.
вроди бы всё просто пишешь формат и компилтся тот файл который нужен,
но оказывается что всё савсем не так, эта директива меняет всю структуру построения программы
к примеру, если мы пишем такой формат
то нам надо ещё вставлять секшансы
и хрен его знает какой синтаксис у этих директив
и что это означает
если пишем
то унас добавляются ещё какие то директивы
с 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 байт что то означают
и так далее
и для того чтобы я не делал лишних действий
для того что бы определить адрес нужных данных
мне нужно использовать эти директивы
только вот они не работают если использовать документацию
скажите как мне эти дерективы использовить, для того чтобы грамотно организовать даннае?
есть такая директива 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: Select all
format PE GUI 4.0 DLL at 7000000h on 'stub.exe'
Code: Select all
section '.text' code readable executable
section '.reloc' data discardable fixups
section '.rsrc' data readable resource from 'my.res'
и что это означает
если пишем
Code: Select all
format COFF
Code: Select all
extrn exit
extrn '__imp__MessageBoxA@16' as MessageBox:dword
public main
public start as '_start'
только вот как пользовать эти сегменты ?
как сегменты распределюутся по процессору?
для чего они нужны?
какие у них ограничения?
следующий вопрос по дерективе 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: Select all
mov bx, f_string
add bx, 4
мне нужно использовать эти директивы
только вот они не работают если использовать документацию
скажите как мне эти дерективы использовить, для того чтобы грамотно организовать даннае?