чистый ассемблерный код mingw-w64 без дополнительной (избыточной) информации - PullRequest
0 голосов
/ 17 февраля 2020

Я изучаю реверс-инжиниринг. Я пытаюсь скомпилировать код для просмотра на ассемблере для лучшего понимания. Как я могу отключить любую дополнительную (избыточную) информацию в коде ассемблера? Я хочу оставить только чистый ассемблерный код

текущая команда (windows) gcc -S .\test.c -masm=intel -O0

вывод:

    .file   "test.c"
    .intel_syntax noprefix
    .text
    .def    __main; .scl    2;  .type   32; .endef
    .globl  main
    .def    main;   .scl    2;  .type   32; .endef
    .seh_proc   main
main:
    push    rbp
    .seh_pushreg    rbp
    mov rbp, rsp
    .seh_setframe   rbp, 0
    sub rsp, 32
    .seh_stackalloc 32
    .seh_endprologue
    call    __main
    nop
    add rsp, 32
    pop rbp
    ret
    .seh_endproc
    .ident  "GCC: (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0"

Этот вывод выдает информацию избыточности. Например, я могу удалить .file "test.c", это ни на что не влияет.

Источник:

void main() {
    }

1 Ответ

1 голос
/ 17 февраля 2020

gcc -s - опция для удаления символов. Однако вы можете запустить strip впоследствии, чтобы удалить дополнительные данные, которые все еще могут быть включены.

В чем разница между командами "g cc -s" и "strip"?

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

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

...