конструкция компилятора — от C / C ++ до NASM src

Мне нужно разработать некоторые алгоритмы, которые действительно легко сделать с языком высокого уровня, таким как C или C ++, но которые действительно трудно написать напрямую как NASM.

Поскольку в основном компилятору C и C ++ приходится использовать низкоуровневые istructions для создания двоичных файлов, существует простой способ получения кода NASM из программ на C \ C ++.

0

Решение

От man gcc:

-S

Остановиться после этапа собственно компиляции; не собирать. Вывод в виде файла кода ассемблера для каждого не ассемблера
указан входной файл

По умолчанию имя файла ассемблера для исходного файла создается
замена суффикса .c, .i и т. д. на .s.

gcc -S hello.c должен создать файл hello.s с соответствующим кодом ассемблера.

Работает на g++ тоже.
Другие компиляторы, вероятно, имеют аналогичную опцию.


Например, для этой программы (hello.c):

#include <stdio.h>

int main() {
printf("Hello, world! %d\n", 6*7);
return 0;
}

Выход (hello.s) содержит это:

        .file   "hello.c".section        .rodata
.LC0:
.string "Hello, world! %d\n".text
.globl  main
.type   main, @function
main:
.LFB0:
.cfi_startproc
pushq   %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq    %rsp, %rbp
.cfi_def_cfa_register 6
movl    $42, %esi
movl    $.LC0, %edi
movl    $0, %eax
call    printf
movl    $0, %eax
popq    %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size   main, .-main
.ident  "GCC: (Debian 4.7.2-5) 4.7.2".section        .note.GNU-stack,"",@progbits
1

Другие решения

Я считаю, что проще скомпилировать (с -g, чтобы увидеть исходный код вместе со сборкой) и запустить objdump на двоичном

objdump -M intel -d a.out
2

По вопросам рекламы [email protected]