global-variables - 优化的 ELF 二进制文件中的全局变量名称
问题描述
为什么 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"
我有点惊讶地发现里面的实际名称 moish(因为我不确定它的用途):
504: c7 05 06 0b 20 00 05 movl $0x5,0x200b06(%rip) # 201014 <moish>
0000000000201014 <moish>:
有理由保留吗?
解决方案
我有点惊讶地发现里面的真实名字moish
UNIX 二进制文件传统上将符号表保存在链接二进制文件(可执行文件或 DSO)中以帮助调试。符号表不用于其他任何用途,您可以使用strip
命令或使用-Wl,-s
标志链接将其从二进制文件中删除。
strip
拆机后是这样的:
105a: c7 05 c8 2f 00 00 05 movl $0x5,0x2fc8(%rip) # 402c <__cxa_finalize@plt+0x2ffc>
推荐阅读
- jquery - 在页面加载时更改第一个活动的 toggleClass
- django - 为什么域名会自动从我的 django.setting 中删除
- java - 检查是否存在具有指定字段值的数据库对象
- python - matplotlib 在交互式绘图后没有响应
- ios - 用于 imagepickercontroller 的 photoLibrary 中的视频
- android - Android 应用程序在 Firestick 设备上加载广告时崩溃
- matlab - Matlab 中这个图像采样代码的 OpenCV 等价物是什么?
- tensorflow.js - Tensorflow.Js 问题:“错误:get() 中的坐标数必须与张量的等级相匹配”
- javascript - 在 Threejs 中的对象上放置图像
- ruby-on-rails - Rails 5在gem中有条件地需要依赖gem