c - 如何在反汇编中查看局部变量符号名称? (来自 C 源)

标签 c symbols disassembly identifier

如果我像这样编译源代码,(使用 Clang、Mac OS X)

int main()
{
        int a = 4;
        int* b = &a;
        int c = *b;
        return 6;
}

编译后的目标文件会这样被反汇编。 (使用 otool,Mac OS X)

main.o:
(__TEXT,__text) section
_main:
0000000000000000    pushq   %rbp
0000000000000001    movq    %rsp,%rbp
0000000000000004    movl    $0x00000006,%eax
0000000000000009    leaq    0xf8(%rbp),%rcx
000000000000000d    movl    $_main,0xfc(%rbp)
0000000000000014    movl    $0x00000004,0xf8(%rbp)
000000000000001b    movq    %rcx,0xf0(%rbp)
000000000000001f    movq    0xf0(%rbp),%rcx
0000000000000023    movl    (%rcx),%edx
0000000000000025    movl    %edx,0xec(%rbp)
0000000000000028    popq    %rbp
0000000000000029    ret

是否可以在反汇编中看到局部变量 符号名称?就像调试器一样。如果可能,我该怎么做?

最佳答案

您的程序中除了_main 外没有其他符号。您必须同时执行这两项操作:制作一个实际使用符号的程序(定义一个(非内联)函数)并使用编译器的命令行参数使其转储调试​​信息。

关于c - 如何在反汇编中查看局部变量符号名称? (来自 C 源),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5281368/

相关文章:

assembly - 读取 AND ISA 代码时遇到问题

c - 在函数签名中将枚举声明为返回状态

c - 即使我正在保存,数据库也不会在 C 上输出

c - 使用 sk_buff 从内核中的 char* buf 发送数据包到网络设备

objective-c - 库和项目中类的重复符号

c++ - 为什么我们通过了链接阶段仍然错过了符号?

c - 将十六进制解析为 LC3 ADD 指令

debugging - 谁能清楚地解释一下这个拆解吗?

c - 为什么 fopen() 不打开我的数据?

python - 计算每个符号在字符串中出现的次数 - python