如何判断一个.so是否是debug编译的?

如果用此方法:用file来查看一个.so, 根据是否包含”not stripped”来判断该.so是否是debug编译的。然而stripped/not stripped并不是debug/release编译的判断标准. 对debug和release的.so运行file后可得出几乎相同的输出, 都是not stripped。所以此方法是不准确的。

debug/release的区别更多的表现在.so和可执行程序所拥有的段上。debug编译出来的.so和可执行程序拥有很多附加的段来包含哪些debug的信息。所以查看段信息是一种判断的方式。

对同一个开源软件进行debug和release编译, 并且查看某个.so的段(readelf -S)

> readelf -S  文件名
  • 1

发现release编译的只有29个段:

There are 29 section headers, starting at offset 0x1b7d78:Section Headers:
[Nr] Name Type Address Offset
Size EntSize Flags Link Info Align
[ 0] NULL 0000000000000000 00000000 0000000000000000 0000000000000000 0 0 0 [ 1] .note.gnu.build-i NOTE 00000000000001c8 000001c8 0000000000000024 0000000000000000 A 0 0 4 [ 2] .gnu.hash GNU_HASH 00000000000001f0 000001f0 0000000000003430 0000000000000000 A 3 0 8 [ 3] .dynsym DYNSYM 0000000000003620 00003620 000000000000b400 0000000000000018 A 4 2 8 [ 4] .dynstr STRTAB 000000000000ea20 0000ea20 00000000000083e2 0000000000000000 A 0 0 1 [ 5] .gnu.version VERSYM 0000000000016e02 00016e02 0000000000000f00 0000000000000002 A 3 0 2 [ 6] .gnu.version_r VERNEED 0000000000017d08 00017d08 0000000000000080 0000000000000000 A 4 2 8 [ 7] .rela.dyn RELA 0000000000017d88 00017d88 0000000000009570 0000000000000018 A 3 0 8 [ 8] .rela.plt RELA 00000000000212f8 000212f8 00000000000080d0 0000000000000018 A 3 10 8 [ 9] .init PROGBITS 00000000000293c8 000293c8 0000000000000018 0000000000000000 AX 0 0 4 [10] .plt PROGBITS 00000000000293e0 000293e0 00000000000055f0 0000000000000010 AX 0 0 4 [11] .text PROGBITS 000000000002e9d0 0002e9d0 0000000000144658 0000000000000000 AX 0 0 16 [12] .fini PROGBITS 0000000000173028 00173028 000000000000000e 0000000000000000 AX 0 0 4 [13] .rodata PROGBITS 0000000000173040 00173040 000000000001e9a0 0000000000000000 A 0 0 32 [14] .eh_frame_hdr PROGBITS 00000000001919e0 001919e0 000000000000427c 0000000000000000 A 0 0 4 [15] .eh_frame PROGBITS 0000000000195c60 00195c60 0000000000017d7c 0000000000000000 A 0 0 8 [16] .ctors PROGBITS 00000000003ae1e8 001ae1e8 0000000000000010 0000000000000000 WA 0 0 8 [17] .dtors PROGBITS 00000000003ae1f8 001ae1f8 0000000000000010 0000000000000000 WA 0 0 8 [18] .jcr PROGBITS 00000000003ae208 001ae208 0000000000000008 0000000000000000 WA 0 0 8 [19] .data.rel.ro PROGBITS 00000000003ae220 001ae220 0000000000005b38 0000000000000000 WA 0 0 32 [20] .dynamic DYNAMIC 00000000003b3d58 001b3d58 00000000000001a0 0000000000000010 WA 4 0 8 [21] .got PROGBITS 00000000003b3ef8 001b3ef8 00000000000010e8 0000000000000008 WA 0 0 8 [22] .got.plt PROGBITS 00000000003b4fe8 001b4fe8 0000000000002b08 0000000000000008 WA 0 0 8 [23] .data PROGBITS 00000000003b7b00 001b7b00 0000000000000158 0000000000000000 WA 0 0 32 [24] .bss NOBITS 00000000003b7c58 001b7c58 0000000000000010 0000000000000000 WA 0 0 8 [25] .comment PROGBITS 0000000000000000 001b7c58 000000000000002a 0000000000000001 MS 0 0 

转载于:https://www.cnblogs.com/qiumingcheng/p/11195076.html

Linux下查看.so和可执行文件是否debug编译相关推荐

  1. Linux下查看磁盘挂载的三种方法

    Linux下查看磁盘挂载的三种方法 2009-06-05 23:17 好久没有更新日志了,呵呵.不是没有要写的东东.实在抽不出时间来写,要准备公司的考试呢,C++考试.已经有七个月没有写C++代码了, ...

  2. Linux下查看TOMCAT控制台

    Linux下查看TOMCAT控制台 $ ./catalina.sh run 就可以了. debug模式: $ ./catalina.sh debug ...... help (查看帮助) exit(退 ...

  3. linux环境下查看进程,Linux下查看进程(程序)启动时的环境变量

    背景: 因最近试安装Linux下的jira,有一个中文插件安装后,一旦设置开机启动后,它是英文,而在终端再重新启动一次后呢,似乎插件生效,它又恢复为正常中文界面,我首先想这这涉及到一个环境变量的问题, ...

  4. linux 下查看某个端口是否打开,linux如何查看某个端口是否开放

    1.你可以使用 lsof 命令来查看某一端口是否开放.查看端口可以这样来使用,我就以80端口为例: lsof -i:80 或者 lsof -i:22 如果有显示说明已经开放了,如果没有显示说明没有开放 ...

  5. linux下查看内存使用情况

    在Linux下查看内存我们一般用free命令: [root@scs-2 tmp]# free              total       used       free     shared   ...

  6. Linux下查看系统信息

    目录 1. CPU信息 1. 查看物理CPU的个数 2. 查看逻辑CPU的个数 3. 查看CPU是几核 4. 查看CPU的主频 5. 查看CPU型号及个数 6. 查看系统核心数 7. cpu的运行模式 ...

  7. linux下查看GPU版本和详情信息 CUDA版本信息 anaconda版本信息

    查看GPU型号 lspci | grep -i nvidia 查看NVIDIA驱动版本 sudo dpkg --list | grep nvidia-* # lspci | grep -i nvidi ...

  8. linux下查看文件编码及修改编码

    linux下查看文件编码及修改编码 查看文件编码 在Linux中查看文件编码可以通过以下几种方式: 1.在Vim中可以直接查看文件编码 :set fileencoding 即可显示文件编码格式. 如果 ...

  9. linux下查看和添加PATH环境变量

    linux下查看和添加PATH环境变量 $PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接. 编辑你的 PA ...

最新文章

  1. Python基础教程:in和not in操作
  2. Python3 函数(方法)
  3. MOSS2010站点大文件上传设置
  4. 微信小程序开发之路(一)
  5. FMDB数据库框架的是使用
  6. Linux:yum配置和使用
  7. HTML Agility Pack 搭配 ScrapySharp,彻底解除Html解析的痛苦
  8. python语法学习第一天--变量、运算符、数据类型
  9. MySQL Password Expired
  10. javascript监听输入框_js监听输入框值的即时变化onpropertychange、oninput
  11. cannot retry due to redirection, in streaming mode
  12. hexo WARN No layout: index.html
  13. 蚂蚁安全键盘空白或应该显示安全键盘却显示的系统键盘的问题(iOS中时间佛历如何转换为公历)
  14. oracle 导出空行,oracle sqlplus空行处理方法
  15. RGB-D、TOF深度相机的原理
  16. 行内元素、块元素、行内块元素的区别
  17. 计算机硬件加速怎么开,怎么开启显卡硬件加速?开启显卡硬件的加速功能步骤...
  18. 查看win信任的证书办法机构(CA机构的公钥)
  19. OSI/RM各层功能—物理层、数据链路层
  20. pycharm 自动更正_如何在Android的自动更正词典中添加单词或短语

热门文章

  1. 数组的有关属性和方法
  2. thrift框架使用C++
  3. ps aux参数说明
  4. java去掉mongodb日志_如何禁用mongoDB java驱动程序日志记录?
  5. 以太坊数据结构MPT
  6. 这个美国议员候选人想发币,联邦选举委员会还答应了
  7. 区块链基础--工作量证明
  8. 活动排序工具之双代号网络(AOA)与单代号网络(AON)[cont.]
  9. (C++)小明种苹果(续)
  10. java怎么返回xml_java – 如何从Web服务返回XML