2

У меня вопрос: как программно создать объектный или даже сразу исполняемый файл?

Т е, допустим, у меня есть язык программирования свой, и я хочу, чтобы он был компилируемым.

К интерпретируемым и байт-кодным языкам у меня нет вопросов, поскольку в обоих случаях задействуется некий интерпретатор, а не сама ОС. Т е я могу запросто описать синтаксис, правила считывания байт-кода, и т д. Сам формат исполняемого файла и его исполнение находится под моим контролем, я могу этим управлять, я могу это понимать.

А вот как создать (программно) исполняемый файл ELF/PE/COFF - я не знаю.

Конечно, кто-то скажет про LLVM. Но, тут возникает вопрос: а ведь как-то и сам LLVM транслирует LLVM-IR в исполняемый файл. Тот же GCC, компиляторы ассемблера (GNU AS, NASM, YASM и т д) вообще обходятся без этого вашего LLVM. Как? Как устроена компиляция в "нативный" код, понятный самой операционной системе?

  • 2
    есть спецификации по структуре и наполнению исполняемого файла. просто следуешь ей и все – Grundy Aug 12 '22 at 08:04
  • 1
    GNU AS, NASM, YASM сами создают только объектные файлы. Для создания исполняемого файла они используют линкер. – insolor Aug 12 '22 at 08:20
  • ну так и вопрос: как создать объектный или исполняемый файл – RandomDice 779 Aug 12 '22 at 08:45
  • 2
    @RandomDice779, например. Тут указано где и какие данные должны располагаться. – Grundy Aug 12 '22 at 09:39
  • @RandomDice779 которткий ответ - по спецификации. Гуглите спецификацию, например, COFF, импортируете нужные структуры из windows.h, формируете файл. Аналогично с исполняемым файлом. – insolor Aug 12 '22 at 10:06

0 Answers0