我正在寻找适用于 C 的编译器或更好的 IDE,它可以生成完全链接的程序,包括来自 CRT 的汇编程序形式的函数。有没有?我试过 Visual C Express 2008。它有一个反汇编程序,但有点奇怪。我的意思是出于某种原因,它显示了许多“奇怪”的代码行,例如大约 100 行的 mov a,#3
...。它用于学习目的。感谢提示。
最佳答案
gcc将生成 ASM 文件。如果您使用 gcc -Wa,-adhln -g [source.c]
gcc 和 as 会将 C 源代码行与生成的汇编代码交织在一起。
例子:
这个 C 函数:
long Fibonacci(long x) {
if (x == 0) return 0;
if (x == 1) return 1;
return Fibonacci(x - 1) + Fibonacci(x - 2);
}
成为这个 ASM 文件:
_Fibonacci:
Leh_func_begin1:
pushq %rbp
Ltmp0:
movq %rsp, %rbp
Ltmp1:
subq $32, %rsp
Ltmp2:
movq %rdi, -16(%rbp)
movq -16(%rbp), %rax
cmpq $0, %rax
jne LBB1_2
movq $0, -8(%rbp)
jmp LBB1_5
LBB1_2:
movq -16(%rbp), %rax
cmpq $1, %rax
jne LBB1_4
movq $1, -8(%rbp)
jmp LBB1_5
LBB1_4:
movq -16(%rbp), %rax
movabsq $1, %rcx
subq %rcx, %rax
movq %rax, %rdi
callq _Fibonacci
movq -16(%rbp), %rcx
movabsq $2, %rdx
subq %rdx, %rcx
movq %rcx, %rdi
movq %rax, -24(%rbp)
callq _Fibonacci
movq -24(%rbp), %rcx
addq %rax, %rcx
movq %rcx, -8(%rbp)
LBB1_5:
movq -8(%rbp), %rax
addq $32, %rsp
popq %rbp
ret
Leh_func_end1:
执行此操作时,您需要关闭优化。
也可以将生成的 ASM 代码与更高级别的源代码交错,例如作者所做的 HERE .
关于c - 是否有任何 C 编译器可以向您展示 asm 中的链接程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3867721/