Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 无附加(冗余)信息的mingw-w64纯汇编代码_Assembly_Mingw_Reverse Engineering_Mingw W64 - Fatal编程技术网

Assembly 无附加(冗余)信息的mingw-w64纯汇编代码

Assembly 无附加(冗余)信息的mingw-w64纯汇编代码,assembly,mingw,reverse-engineering,mingw-w64,Assembly,Mingw,Reverse Engineering,Mingw W64,我在学习逆向工程。我试图将代码编译到汇编程序视图,以便更好地理解。如何禁用汇编代码中的任何其他冗余信息?我只想留下纯汇编代码 当前命令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;

我在学习逆向工程。我试图将代码编译到汇编程序视图,以便更好地理解。如何禁用汇编代码中的任何其他冗余信息?我只想留下纯汇编代码

当前命令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"
此输出生成冗余信息。例如,我可以删除.test.c文件,它不会影响任何东西

资料来源:

void main() {
    }
gcc-s是剥离符号的选项。但是,您可以在以后运行strip来删除仍然可能包含的额外数据

但是,这主要影响最终的二进制代码,而不一定影响使用-S获得的源代码


如果您想更好地理解代码,我建议您将其编译为二进制代码,并将其加载到调试器中进行检查,同时保留生成的asm源代码作为参考

如果您只需要装配,那么与任何拆卸器提供的有什么区别?特别是,如果使用调试符号编译。所有这些冗余信息都是编译时丢失的高级细节,如果你让GCC生成一个汇编文件以简化逆向工程,为什么要删除它们?目前,我只是问编译,不分解我不明白,但你可以通过简单地丢弃以点开头的行来获得很长的路要走。我正在这么做,但目前,我对asm源代码的理解不是很好:但这是学习的一部分。我会从一个很小的例子开始。例如,添加一些数字并打印它们。然后,您必须隔离打印部分,您可以很好地看到程序的其余部分编译成了什么。显然,你不会从一个复杂的程序开始,所以你可以控制你能消化多少。您应该在调试模式thouhg下编译,或者至少在没有任何优化和调试关闭的情况下编译。除非你知道如何击败优化器,因为它会干扰你想要看到的东西。