gpt4 book ai didi

c - 是否有任何 C 编译器可以向您展示 asm 中的链接程序?

转载 作者:太空狗 更新时间:2023-10-29 15:27:51 26 4
gpt4 key购买 nike

我正在寻找适用于 C 的编译器或更好的 IDE,它可以生成完全链接的程序,包括来自 CRT 的汇编程序形式的函数。有没有?我试过 Visual C Express 2008。它有一个反汇编程序,但有点奇怪。我的意思是出于某种原因,它显示了许多“奇怪”的代码行,例如大约 100 行的 mov a,#3...。它用于学习目的。感谢提示。

最佳答案

gcc将生成 ASM 文件。如果您使用 gcc -Wa,-adhln -g [source.c] gcc 和 as 会将 C 源代码行与生成的汇编代码交织在一起。

clangLLVM将生成高质量的 ASM 文件。

例子:

这个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com