查看SO KO 执行程序相关信息命令
1 查看SO
查看so库的方法__臣本布衣_新浪博客 (sina.com.cn)
1、nm -D libxxx.so 打印出符号信息。
一般这样用:nm -D libxxx.so |grep T
$ nm -D /lib/libstdc++.so | grep T
0000000000000618 T _fini
00000000000004e0 T _init
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
2、ldd libxxx.so 查看依赖关系
$ ldd /lib/libstdc++.so
ldd: warning: you do not have execution permission for `/lib/libstdc++.so'
linux-vdso.so.1 => (0x00007fff029fc000)
libc.so.6 => /lib64/libc.so.6 (0x00007f6523e82000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6524452000)
3、readelf -a libxxxx.so 用来读取elf信息
一般这样用:readelf libxxx.so |grep NEEDED 这样也可以读取依赖关系
$ readelf -a /lib/libstdc++.so | grep NEEDED
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
5、objdump -d libxxxx.so
6、file libxxx.so 这样可以查看so库的属性
$ file /lib/libstdc++.so
/lib/libstdc++.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=d098ee7c7e519e2c4311869633523aae4f805c17, not stripped
2 查看可执行程序
参考博客:linux下查看so或可执行程序的依赖库_Linux_脚本之家 (jb51.net)
1、查看可执行程序依赖的库
$ readelf -a test | grep NEEDED
0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED) Shared library: [libm.so.6]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
2、查看各个段大小
$ size test
text data bss dec hex filename
49052 1500 320 50872 c6b8 test
3 查看代码分区
参考博客:.bss,.data,.text,.rodata - 水中有泪 - 博客园 (cnblogs.com)
系统根据文件生成区块(section)会区分存储特性:
查看命令:objdump -h xx.o
(1)特性种类:
| 种类 | 说明 |
|---|---|
| SHT_NULL | 无效的区块 |
| SHT_PROGBITS | 带有数据(机械语和初始值等)的区块 |
| SHT_NOBITS | 不带有数据 |
| SHT_RELA | 带有可再分配的数据(不依赖与内存的代码)的区块 |
| SHT_REL | |
| SHT_SYMTAB | 带有符号表的区块 |
(2)属性
| 属性 | 说明 |
|---|---|
| SHF_ALLOC | 应该放在内存上的区块 |
| SHF_WRITE | 应该放在可读写区域的区块 |
| SHF_EXECINSTR | 应该放在可执行区域的区块 |
(3)归类
| 文件 | 种类 | 属性 |
|---|---|---|
| .bbs | SHT_NOBITS | SHF_ALLOC + SHF_WRITE |
| .data | SHT_PROGBITS | SHF_ALLOC + SHF_WRITE |
| .text | SHT_PROGBITS | SHF_ALLOC + SHF_EXECINSTR |
| .rodata | SHT_PROGBITS | SHF_ALLOC |
BSS :主要存放0或者无初始值的全局变量和0或者无初始值的静态局部变量
Data:主要存放初始值是0以外的全局变量和初始值为0以外的静态局部变量
Text:机械语跟代码
Rodata:字符串,或者定数(const)
4 内核打印
参考博客:https://www.cnblogs.com/Caden-liu8888/p/5652168.html
1、查看当前控制台的打印级别
$ cat /proc/sys/kernel/printk
4 4 1 7
其中第一个“4”表示内核打印函数printk的打印级别,只有级别比他高的信息才能在控制台上打印出来,既 0-3级别的信息
2、修改打印等级
echo "新的打印级别 4 1 7" >/proc/sys/kernel/printk
printk的打印级别
| 打印等级 | 说明 |
|---|---|
| #define KERN_EMERG | "<0>" /* system is unusable */ |
| #define KERN_ALERT | "<1>" /* action must be taken immediately */ |
| #define KERN_CRIT | "<2>" /* critical conditions */ |
| #define KERN_ERR | "<3>" /* error conditions */ |
| #define KERN_WARNING | "<4>" /* warning conditions */ |
| #define KERN_NOTICE | "<5>" /* normal but significant condition */ |
| #define KERN_INFO | "<6>" /* informational */ |
| #define KERN_DEBUG | "<7>" /* debug-level messages */ |
不够打印级别的信息会被写到日志中可通过dmesg 命令来查看
3、printk函数的使用
printk(打印级别 “要打印的信息”)
打印级别 既上面定义的几个宏
4、打印日志会存放在/proc/kmsg中,这是一个进程,可以一直读取它来进行实时打印。
tail -n 10 -f /proc/kmsg
5 KO调试
(1)去除符号表
strip --strip-debug [需要处理的文件]
$ strip --strip-debug test
(2)把debug信息加回去
objcopy --add-gnu-debuglink=[debug文件] [需要添加debug信息的文件]
(3)将test的调试信息保存到 test.debug文件中,需要的时候装入就可。
$ objcopy --only-keep-debug test test.debug
$ gdb ./test
(gdb) l
No symbol table is loaded. Use the "file" command.
(gdb) file diag_shell.debug
(gdb) l
16 int32_t main(int argc, char *argv[])
查看SO KO 执行程序相关信息命令的更多相关文章
- 查看Java JVM参数配置信息命令
查看Java JVM参数配置信息命令 java -XX:+PrintCommandLineFlags jvm运行时状态的参数,可以很快找出问题所在.现在把几个命令记录一下:1. jstat这个命令对于 ...
- 查看cpu核的相关信息
查看CPU信息(型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 80 Intel(R) Xeon(R) CPU E7-4820 v3 ...
- CentOS查看显卡及GPU相关信息
lspci | grep -i vga 这样就可以显示机器上的显卡信息,比如 [root@localhost conf]# lspci | grep -i vga01:00.0 VGA compat ...
- 怎样在 Linux 上查看某个端口的相关信息?
比如 TCP端口 / UDP端口 / 端口占用程序的进程号 等, 这些信息都可以使用: netstat -atunlp | grep 端口号 来进行获取. 比如我们想获取 22 端口的相关信息: 这里 ...
- Linux命令 uname:查看系统与内核相关信息
zh@zh:~$uname --help zh@zh:~$uname -a //所有系统相关的信息
- linux 查看cpu相关信息命令
- 查看linux系统版本相关信息
1.查看内核版本:cat /proc/version A机器 root@debian:~# cat /proc/version Linux version -- (ty@debian) ( (Debi ...
- 性能测试必备知识(2)- 查看 Linux 的 CPU 相关信息
做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 查看系统 CPU 信息 cat /proc/ ...
- Linux使用storcli工具查看服务器硬盘和raid组信息
1.简介 MegaCli 是LSI公司官方提供的SCSI卡管理工具,由于LSI被收购变成了现在的Broadcom,所以现在想下载MegaCli, 需要去Broadcom官网查找Legacy产品支持,搜 ...
- MySQL查看数据库相关信息
使用MySQL时,需要了解当前数据库的情况,例如当前的数据库大小.字符集.用户等等.下面总结了一些查看数据库相关信息的命令 1:查看显示所有数据库 mysql> show databases ...
随机推荐
- 深度解读《深度探索C++对象模型》之C++虚函数实现分析(一)
接下来我将持续更新"深度解读<深度探索C++对象模型>"系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表. 假如有这样的一段 ...
- 科普达人丨一图看懂块存储&云盘
简介: 建议收藏 原文链接:https://click.aliyun.com/m/1000363155/ 本文为阿里云原创内容,未经允许不得转载.
- 滴滴 Flink-1.10 升级之路
简介: 滴滴实时计算引擎从 Flink-1.4 无缝升级到 Flink-1.10 版本,做到了完全对用户透明.并且在新版本的指标.调度.SQL 引擎等进行了一些优化,在性能和易用性上相较旧版本都有很大 ...
- 知乎的 Flink 数据集成平台建设实践
简介: 本文由知乎技术平台负责人孙晓光分享,主要介绍知乎 Flink 数据集成平台建设实践.内容如下: 1. 业务场景 : 2. 历史设计 : 3. 全面转向 Flink 后的设计 : 4. 未来 F ...
- 阿里巴巴超大规模 Kubernetes 基础设施运维体系揭秘
简介:ASI 作为阿里集团.阿里云基础设施底座,为越来越多的云产品提供更多专业服务,托管底层 K8s 集群,屏蔽复杂的 K8s 门槛.透明几乎所有的基础设施复杂度,并用专业的产品技术能力兜底稳定性, ...
- 聚焦 | 数据湖分析如何面向对象存储OSS进行优化?
简介: 最佳实践,以DLA为例子.DLA致力于帮助客户构建低成本.简单易用.弹性的数据平台,比传统Hadoop至少节约50%的成本.其中DLA Meta支持云上15+种数据数据源(OSS.HDFS.D ...
- 一文了解EPaxos核心协议流程
简介: EPaxos(Egalitarian Paxos)作为工业界备受瞩目的下一代分布式一致性算法,具有广阔的应用前景.但纵观业内,至今仍未出现一个EPaxos的工程实现,甚至都没看到一篇能把EPa ...
- GRPC: 如何优雅关闭进程(graceful shutdown)
简介: 本文将介绍优雅关闭 gRPC 微服务.在进程收到关闭信号时,我们需要关闭后台运行的逻辑,比如,MySQL 连接等等. 介绍 本文将介绍优雅关闭 gRPC 微服务. 什么是优雅关闭? 在进程收 ...
- c++图像处理程序编译成.so动态链接库供Java调用(包含jni文件与引用第三方动态链接库opencv)
一.linux编译so文件需要准备的环境 1.安装JDK(注意:不能安装openjdk,因为openjdk没有include目录,编译时需要用到include目录的头文件) 2.安装gcc和g++ ...
- NetCore开发第一步 Log4Net日志引入
1.新建一个带mvc模板的项目: 2.引入Microsoft.Extensions.Logging.Log4Net.AspNetCore包,不要引入错了. 引入后后包的结果如下: 3.Startup类 ...