Создание простых двоичных данных (без ELF, таблицы символов и т. Д.) С использованием ассемблера - PullRequest
0 голосов
/ 10 марта 2011

Я хочу превратить входной файл только для данных, то есть что-то вроде этого:

 .data
 .org 0
 .equ foo, 42
 .asciz "foo"
label:
 .long 0xffffffff
 .long 0x12345678
 .byte foo
 .long label
 .long bar
 .equ bar, 'x'

в файл с соответствующей последовательностью байтов 'f', 'o', 'o', 0, 0xff, 0xff, 0xff, 0xff, 0x78, 0x56, 0x34, 0x12, 42, 4, 0, 0, 0 , 'x', 0, 0, 0.

Когда я собираю это с GNU как (as -o foo.o -s foo.S), я получаю файл ELF размером 400+ байт. Как я могу сделать GNU как (или NASM, или любой другой ассемблер) дать мне простое двоичное представление? Я изучал GNU как варианты, но безрезультатно. Я могу изменить формат ввода, если это облегчает ответ (т. Е. Использовать больше и разные псевдооперации).

Любые намеки высоко ценятся!

С уважением, Дженс

Ответы [ 2 ]

0 голосов
/ 10 марта 2011

Я немного покопался и нашел решение, используя насм, схваченный с http://www.nasm.us/.

Эквивалентные директивы для исходных данных будут выглядеть примерно так:

     org 0
foo  equ 42
     db "foo", 0
label:
     dd 0xffffffff
     dd 0x12345678 
     db foo
     dd label
     dd bar
bar  equ 'x'

Соберите это с nasm -f bin -o file.bin file.S. Вуаля! Обычный двоичный файл в file.bin. Угадай, что делает меня самообучающимся: -)

0 голосов
/ 10 марта 2011

в MASM вы должны собрать MASM в файл .obj, LINK в файл .exe и затем обработать файл результата с помощью утилиты EXE2BIN.

в TASM, который вы соберетефайл .obj, а затем ссылка TLINK с параметрами /t/x.

...