优化的 ELF 二进制文件中的全局变量名称
global variables names in optimized ELF binary
为什么 ELF 文件保留全局变量的实际名称? 而不是只保留它们的地址。这是一个示例文件:
int oren; int moish;
int main(int argc, char **argv)
{
if (argc>3)
{
oren=2;
moish=5;
return oren+moish;
}
return 8;
}
我编译了它并用
寻找 moish
$ gcc -O3 main.c -o main
$ objdump -D ./main | grep "moish"
我有点惊讶地发现里面的真实名字是 moish(因为我不确定
它需要做什么):
504: c7 05 06 0b 20 00 05 movl [=12=]x5,0x200b06(%rip) # 201014 <moish>
0000000000201014 <moish>:
有什么理由保留它吗?
I was a bit surprised to find the actual name moish inside
UNIX 二进制文件传统上在链接二进制文件(executable 或 DSO)中保留符号 table 以帮助调试。符号 table 不用于任何其他用途,您可以使用 strip
命令或使用 -Wl,-s
标志链接将其从二进制文件中删除。
strip
后的反汇编如下所示:
105a: c7 05 c8 2f 00 00 05 movl [=10=]x5,0x2fc8(%rip) # 402c <__cxa_finalize@plt+0x2ffc>
为什么 ELF 文件保留全局变量的实际名称? 而不是只保留它们的地址。这是一个示例文件:
int oren; int moish;
int main(int argc, char **argv)
{
if (argc>3)
{
oren=2;
moish=5;
return oren+moish;
}
return 8;
}
我编译了它并用
寻找 moish$ gcc -O3 main.c -o main
$ objdump -D ./main | grep "moish"
我有点惊讶地发现里面的真实名字是 moish(因为我不确定 它需要做什么):
504: c7 05 06 0b 20 00 05 movl [=12=]x5,0x200b06(%rip) # 201014 <moish>
0000000000201014 <moish>:
有什么理由保留它吗?
I was a bit surprised to find the actual name moish inside
UNIX 二进制文件传统上在链接二进制文件(executable 或 DSO)中保留符号 table 以帮助调试。符号 table 不用于任何其他用途,您可以使用 strip
命令或使用 -Wl,-s
标志链接将其从二进制文件中删除。
strip
后的反汇编如下所示:
105a: c7 05 c8 2f 00 00 05 movl [=10=]x5,0x2fc8(%rip) # 402c <__cxa_finalize@plt+0x2ffc>