Как собрать (или портировать?) Файлы MASM ASM с помощью llvm / clang? - PullRequest
1 голос
/ 10 октября 2019

Я работаю над проектом, в котором используется цепочка инструментов Microsoft (cl.exe, ml.exe, link.exe), которую я пытаюсь перенести в LLVM / clang в рамках проекта с открытым исходным кодом. Портировать компиляцию C-файлов достаточно просто, но понимание того, как построить наши многие * .asm-файлы (написанные в синтаксисе MASM), поставило меня в тупик.

Я не могу найти способ для инструментов llvm (или, если уж на то пошло, nasm) генерировать объектные файлы из источников MASM. Портирование самих файлов было бы большой незапланированной работой, которую я должен избегать, если это вообще возможно, тем более что многие из них не принадлежат нам.

Какие-нибудь рекомендации? Есть какая-нибудь неясная командная строка, которая может сработать? Я слышал о JWasm, но я еще не исследовал его. Если перенос с masm на nasm - единственный вариант, есть ли какие-либо рекомендации, которые облегчили бы преобразование?

1 Ответ

1 голос
/ 10 октября 2019

Нет параметров командной строки, которые позволили бы NASM, GAS или LLVM понимать синтаксис MASM и директивы .

GAS .intel_syntax noprefix подобен MASM, так что вам нужно иметь толькопортировать директивы (например, proc foo / end foo вместо foo:. И .long 1234 вместо dd 1234) и макросы. По крайней мере, я бы сравнил машинный код с объектным файлом, созданным MASM, чтобы увидеть, собирается ли он так же. (по модулю абсолютных адресов, может быть). Или, по крайней мере, разборку различий, чтобы увидеть, разбираются ли обе версии в одну и ту же инструкцию.

Я не пробовал JWasm, но это, вероятно, ваш лучший выбор. Я думаю, что он должен действительно собрать синтаксис MASM. В долгосрочной перспективе вы можете хотеть уменьшить задержки сборки, портируя на GAS .intel_syntax, в противном случае просто продолжайте использовать JWasm, если не окажется, что у него есть недостатки для переносимости или чего-то еще.

Есть ещена языке ассемблера, а не только строки с инструкциями на них. Выравнивание и расположение данных могут иметь значение, и любая хитрость с разделами / сегментами и их выполнение не имеет значения.

...