Как преобразовать ассемблерных код в объектный файл
Начнём с того что на эту тему есть вопрос, который был задан в сентябре прошлого года. Ответа я в этом вопросе не нашёл. Да я читал комментарии. Всё что я из них понял, так это то, что мне надо идти в ВУЗ(а я школу только заканчиваю).
Насчёт таблицы машинного кода я знаю. Но если посмотреть объектные файлы (через команду nm в Linux и dumpbin в Windows) то мы увидим некую структуру по которой расположены эти коды. Если я просто переведу весь ассемблерных код в эти команды, то такой структуры не будет.
Вопрос заключается в том, как добиться такой структуры, которая находится в объектном файле.
Ещё есть вопрос: может в объектном файле не машинный код, а микро код?
Ответы (2 шт):
Чтобы преобразовать ассемблерный код, используется nasm. Это такая утилита, позволяющая собрать код на ассемблере в объектный файл.
Например:
Файл Programm.asm, который надо преобразовать в файл:
section .data
msg db 'Hello, World!', 0
section .text
global _start
_start:
; write our string to stdout
mov eax, 4 ; syscall number for sys_write
mov ebx, 1 ; file descriptor 1 is stdout
mov ecx, msg ; pointer to our message
mov edx, 13 ; length of our message
int 0x80 ; call the kernel
; exit
mov eax, 1 ; syscall number for sys_exit
xor ebx, ebx ; exit code 0
int 0x80 ; call the kernel
И команда, которая выполнит "превращение" Programm.asm в Programm.o:
nasm -f elf64 program.asm -o program.o
Готово!!!
Возможно, ответ на Ваш вопрос был дан в enSO: How Do You Make An Assembler?
Раз Вас интересует этап ассемблирования и создания объектного файла, то четвертая и пятая ссылки англоязычной статьи ведут на спецификации объектных файлов. С ними придётся ознакомиться, так как объектные файлы содержат в себе не просто перевод ассемблерных команд в машинный код, но и другие метаданные, в том числе информацию об отладке, информацию о компоновке динамически подключаемых библиотек и сведения о том, как операционная система должна загружать различные разделы файла в память. Следовательно, совпасть простой перевод ассемблерного кода в машинные коды с реальным объектным файлом не может.
Первая ссылка ответа ведет на книгу про создание ассемблера - файл. Её же рекомендовали в схожем обсуждении. Можете посмотреть первую главу, в которой объясняются варианты разных ассемблеров, схемы их работы, а также построение объектных файлов.
Также существует проект The Assembler Developer's Kit - сайт с мануалами по созданию своего ассемблера. Возможно он будет более прикладным, чем книга выше.
На русском языке информации именно по созданию ассемблеров, а не программировании на языке ассемблера, не то чтобы много, но есть обзорная статья, по которой хотя бы можно понять процессы компиляции.