Создание листинга в FASM
Автор: xrnd | Рубрика: Учебный курс | 28-10-2010 | Распечатать запись
Файл листинга — это очень полезная вещь. Он позволяет увидеть работу компилятора FASM как на ладони: что генерирует каждая строка исходного кода, сколько байт занимают машинные команды, какие значения присваиваются переменным. Листинг может помочь при отладке сложных программ. Также он пригодится начинающим изучать ассемблер.
Сначала необходимо скомпилировать программу — генератор листинга, которая поставляется вместе с FASM. Сделать это очень просто. Нужно открыть файл C:\FASM\TOOLS\WIN32\LISTING.ASM (у меня FASM находится в папке C:\FASM, у вас может быть по-другому) и скомпилировать его (пункт меню Run->Compile). Полученный исполняемый файл (LISTING.EXE) можно для удобства поместить в папку C:\FASM.
Если запустить этот файл из командной строки, то он сообщит способ своего использования:
Обязательными параметрами являются имена входного и выходного файлов. В качестве входного файла должен быть указан специальный файл с информацией об ассемблировании. Опция -a добавляет в листинг адреса. Опция -b позволяет ограничить максимальное количество символов в строке. Она полезна, если вы не хотите мучаться с горизонтальной прокруткой при просмотре листинга 🙂
В качестве примера создадим листинг для программы Hello, world! из части 6 учебного курса:
1 2 3 4 5 6 7 8 9 10 11 | use16 ;Генерировать 16-битный код org 100h ;Программа начинается с адреса 100h mov dx,hello ;В DX адрес строки. mov ah,9 ;Номер функции DOS. int 21h ;Обращение к функции DOS. mov ax,4C00h ;\ int 21h ;/ Завершение программы ;------------------------------------------------------- hello db 'Hello, world!$' |
Чтобы создать листинг, необходимо получить файл с информацией об ассемблировании. Для этого нужно выбрать в меню FASM пункт Run->Build symbols. В результате будет сгенерировано 2 файла — исполняемый файл (*.com) и файл *.fas. Он-то нам и нужен!
Запускать LISTING.EXE каждый раз вручную неудобно, поэтому лучше создать для этих целей bat-файл. Примерно такой:
1 | C:\FASM\LISTING.EXE -a hello.fas hello.lst |
Запустив это файл, мы сгенерируем листинг. Файл листинга — это текстовый файл, его можно просмотреть любым редактором (например, Блокнотом). Внутри файла мы увидим следующее:
1 2 3 4 5 6 7 8 9 10 11 | [0000000000000000] use16 ;Генерировать 16-битный код org 100h ;Программа начинается с адреса 100h 00000000: [0000000000000100] BA 0C 01 mov dx,hello ;В DX адрес строки. 00000003: [0000000000000103] B4 09 mov ah,9 ;Номер функции DOS. 00000005: [0000000000000105] CD 21 int 21h ;Обращение к функции DOS. 00000007: [0000000000000107] B8 00 4C mov ax,4C00h ;\ 0000000A: [000000000000010A] CD 21 int 21h ;/ Завершение программы ;------------------------------------------------------- 0000000C: [000000000000010C] 48 65 6C 6C 6F 2C 20 77 6F 72 6C 64 21 24 hello db 'Hello, world!$' |
Первый столбец показывает смещение, по которому записываются байты в исполняемый файл. Второй столбец — это адреса, по которым данные будут размещаться в памяти во время выполнения программы. Далее идут собственно данные, то есть коды команд, начальные значения переменных и констант, коды символов строк, — в таком виде, в каком они пишутся в файл. После данных мы видим те же самые строки, что в исходнике. Они повторяются в листинге. Для некоторых строк в файл ничего не генерируется (например, для директивы org 100h).
06-04-2011 19:55
полезная утилита для подсчета байтов конкретной комманды, иногда это просто необходимо 😉 … спасибос за опцию
08-04-2011 20:24
Ещё листинг полезен, например, при написании шеллкодов. Можно посмотреть, что код не содержит нулевых или каких-то других байтов.
09-04-2011 18:54
шелл-код мне до него еще далеко 😉
07-10-2011 20:40
«(пункт меню Run->Compile)»
А где такое меню ??? В какой программе ? FASM это же только косоль?!
07-10-2011 20:46
Кажется дошло- это в оригинальном эдиторе FASMW.EXE ? или что это за программа?
такая?
27-10-2011 00:36
Да, в FASMW.EXE
17-09-2012 21:53
Класные уроки,автору респект,жалко что нету как создавать меню как в far или как в bios-очень жалко.И хорошо что поменьше заумных слов!!!.Вобщем я о таких уроках раньше мог только мечьтать.Еще раз благадарю автора(ПРЯМ НЕНАМИЛУЮСЬ УРОКАМИ!)
22-10-2012 14:00
не создаеться файл листинг..все сделал по интсрукции..в чем проблема и как ее решит?