Форматно-независимый двоичный объект? - PullRequest
0 голосов
/ 16 сентября 2018

Обычно объектные файлы, выводимые компилятором, имеют определенный формат, например, ELF в Linux и т. Д., Mach-O в macOS и COFF / PE в Windows.

Теперь предположим, что исходный кодсовместимы на разных платформах.Существует ли форма «объектных файлов», которые не зависят от формата?В том смысле, что двоичный файл этого «независимого от формата формата» может быть «преобразован» или «понижен» до реальных объектных файлов в любом формате (ELF / mach-O / ..) позже.

Двоичная форма LLVM IR является хорошим примером, поскольку она может быть сведена к машинному коду.Однако LLVM IR не зависит от ISA, поэтому он недостаточно низкоуровневый.Предполагая, что дан ISA (например, x86_64), могу ли я пойти еще ниже от ISA-независимого к форматно-независимому?

1 Ответ

0 голосов
/ 16 сентября 2018

Я почти уверен, что такого формата нет, по крайней мере, тот, который не поддерживают основные компиляторы. (Даже если бы был такой формат, он был бы практически бесполезен без поддержки компилятора.)

Но с помощью objconv утилиты , которая может преобразовывать форматы объектных файлов, вы можете достичь того, что вы описали. Просто выберите один из существующих форматов в качестве «независимого» и затем используйте objconv для преобразования в «определенные» форматы (ELF / Mach-O / COFF).

Он работает довольно хорошо, хотя некоторые специфичные для платформы данные (например, информация об отладке) не сохраняются во время преобразования.

...