为什么ELF文件保留全局变量的实际名称?而不只是保留其地址。这是一个示例文件:
int oren; int moish;
int main(int argc, char **argv)
{
if (argc>3)
{
oren=2;
moish=5;
return oren+moish;
}
return 8;
}
我编译了它,并在其中寻找杂色
$ gcc -O3 main.c -o main
$ objdump -D ./main | grep "moish"
我对里面的真实名称感到有些惊讶(因为我不确定需要什么):
504: c7 05 06 0b 20 00 05 movl $0x5,0x200b06(%rip) # 201014 <moish>
0000000000201014 <moish>:
有保留理由吗?
[发现里面的真实名称有些ish异,我感到有些惊讶
UNIX二进制文件传统上将符号表保留在链接的二进制文件(可执行文件或DSO)中,以帮助调试。符号表没有其他用途,您可以使用strip
命令或使用-Wl,-s
标志链接将其从二进制文件中删除。
strip
之后的反汇编如下:
105a: c7 05 c8 2f 00 00 05 movl $0x5,0x2fc8(%rip) # 402c <__cxa_finalize@plt+0x2ffc>