Создание исполняемых файлов в Linux (в связи с реализацией компилятора) - PullRequest
1 голос
/ 05 июля 2011

Для моего университета, диссертации последнего года, я собираюсь реализовать компилятор для скелетной формы языка программирования C, а затем расширять его до тех пор, пока он не будет напоминать что-то более похожее на Java с проверкой границ массивов, type- проверка и пр.

Я относительно компетентен в большей части теории, относящейся к построению компилятора, и имею опыт программирования на языке ассемблера MIPS, поэтому я немного понимаю, что такое писать код чрезвычайно низкого уровня.

Мое главное беспокойство заключается в том, что я, вероятно, смогу пройти весь путь до того момента, когда мне потребуется произвести фактический вывод машинного кода, но тогда я не буду достаточно понимать, как выполняется машинный код с точки зрения операционная система, в которой он работает.

Итак, мой настоящий вопрос в основном таков: «Кто-нибудь знает лучшее место для чтения о написании ассемблера для запуска на процессоре Intel x86-64 под Linux?»

Основным пробелом в моих знаниях является то, как машинный код фактически выполняется на практике. Работает ли он непосредственно на процессоре, создавая syscall (или эквивалент x86), когда ему нужны службы, предоставляемые ядром, или это язык ассемблера, каким-то образом инкапсулированное описание, которое сообщает ядру как для выполнения инструкций (аналогично интерпретируемому языку, такому как Java)?

Любая помощь, которую вы можете оказать, будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 05 июля 2011

В этом документе объясняется, как можно реализовать интерфейс сторонней функции для взаимодействия с другим кодом: http://www.x86 -64.org / Documentation / abi.pdf

1 голос
/ 05 июля 2011

Во-первых, для машинного кода начните здесь: http://www.intel.com/products/processor/manuals/

Далее, я предполагаю, что ваш вопрос о том, как выполняется машинный код, на самом деле о том, как ОС загружает исполняемый файл в память и вызывает main ()? Эти ссылки могут помочь

Линкеры и загрузчики: http://www.linuxjournal.com/article/6463

Формат файла ELF: http://en.wikipedia.org/wiki/Executable_and_Linkable_Format и http://www.linuxjournal.com/article/1060

Ваш машинный код попадет в секцию .text исполняемого файла

Наконец, удачи. Ваш проект похож на мой последний год, за исключением того, что я нацелился на JVM и скомпилировал подмножество Visual Basic!

...