如何从gcc中的C / C ++源获取汇编程序输出?

发布于 2021-01-29 20:16:26

如何做到这一点?

如果我想分析某些东西是如何编译的,我将如何获取发出的汇编代码?

关注者
0
被浏览
281
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用该-S选项来gcc(或g ++)。

    gcc -S helloworld.c
    

    这将在helloworld.c上运行预处理器(cpp),执行初始编译,然后在运行汇编器之前停止。

    默认情况下,这将输出一个文件helloworld.s。仍可以使用该-o选项设置输出文件。

    gcc -S -o my_asm_output.s helloworld.c
    

    当然,这只有在您拥有原始来源的情况下才有效。如果仅具有结果对象文件,则可以objdump通过设置--disassemble选项(或-d缩写形式)来使用。

    objdump -S --disassemble helloworld > helloworld.dump
    

    如果为目标文件启用了调试选项(-g在编译时)并且未剥离文件,则此选项最有效。

    运行file helloworld将为您提供一些有关使用objdump获得的详细程度的指示。



  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这将生成带有C代码+行号交织在一起的汇编代码,以便更轻松地查看哪些行生成什么代码:

    # create assembler code:
    g++ -S -fverbose-asm -g -O2 test.cc -o test.s
    # create asm interlaced with source lines:
    as -alhnd test.s > test.lst
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看