在哪里可以找到在GCC汇编输出中调用的过程的汇编代码? [英] Where do I find the assembly code for a procedure called in the GCC assembly output?
问题描述
我一直在玩GCC的Assembly Output开关:
I've been playing around with the assembly output switch for GCC:
gcc -S -c helloworld.c
helloworld.c :
#include <stdio.h>
int main(void){
printf("Hello World!\n");
return 0;
}
helloworld.s :
.file "helloworld.c"
.section .rodata
.LC0:
.string "Hello World!"
.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 $.LC0, %edi
call puts
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
在输出的 helloworld.s
文件中,我注意到输出"Hello World!"的汇编命令.文字很简单:
In the output helloworld.s
file, I notice that the assembly command to output the "Hello World!" text is simply:
call puts
但是, helloworld.s1
文件中没有 put 过程程序集代码.我在哪里可以查看此汇编代码?
However, the helloworld.s1
file doesn't have the puts procedure assembly code within it. Where would I be able to view this assembly code?
推荐答案
作为用户展开:
这是因为您的C程序期望与标准C链接运行时库,其中包含
puts()
.您当然可以挖掘图书馆如果需要的话,请在系统上将其分解为文件.
This is because your C program is expecting to be linked with the standard C runtime library, which has
puts()
in it. You can of course dig up the library file on your system as disassemble it, if you feel like it.
因此,我使用 objdump 来反汇编 libc.a
,并在< puts>
部分下找到了汇编代码: objdump-d/usr/lib/x86_64-linux-gnu/libc.a
So I used objdump to disassemble libc.a
and found the assembly code under the <puts>
section: objdump -d /usr/lib/x86_64-linux-gnu/libc.a
这篇关于在哪里可以找到在GCC汇编输出中调用的过程的汇编代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!