优化的ELF二进制文件中的全局变量名称

问题描述 投票:0回答:1

为什么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>:

有保留理由吗?

global-variables elf
1个回答
0
投票

[发现里面的真实名称有些ish异,我感到有些惊讶

UNIX二进制文件传统上将符号表保留在链接的二进制文件(可执行文件或DSO)中,以帮助调试。符号表没有其他用途,您可以使用strip命令或使用-Wl,-s标志链接将其从二进制文件中删除。

strip之后的反汇编如下:

105a:       c7 05 c8 2f 00 00 05    movl   $0x5,0x2fc8(%rip)        # 402c <__cxa_finalize@plt+0x2ffc>
© www.soinside.com 2019 - 2024. All rights reserved.