首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一个.so文件的objdump?需要帮助来理解消息

在这个问答内容中,我们讨论了一个.so文件的objdump。.so文件是一个Linux系统中的共享库文件,它包含了可执行代码和其他资源,可以被多个程序共享。objdump是一个Linux系统中的命令行工具,用于显示目标文件(如.so文件)的信息。

要使用objdump来查看一个.so文件的信息,可以在命令行中输入以下命令:

代码语言:css
复制
objdump -f <文件名>.so

这将显示文件的格式信息,包括文件类型、架构、大小等。

要查看.so文件中的符号表,可以使用以下命令:

代码语言:bash
复制
objdump -t <文件名>.so

这将显示文件中定义的所有符号,包括函数、变量等。

要查看.so文件中的重定位表,可以使用以下命令:

代码语言:txt
复制
objdump -r <文件名>.so

这将显示文件中的重定位条目,包括重定位类型、符号索引等。

要查看.so文件中的段信息,可以使用以下命令:

代码语言:txt
复制
objdump -h <文件名>.so

这将显示文件中的所有段,包括段名、段类型、大小等。

要查看.so文件中的汇编代码,可以使用以下命令:

代码语言:txt
复制
objdump -d <文件名>.so

这将显示文件中的汇编代码,包括指令、寄存器等。

总之,objdump是一个非常有用的工具,可以帮助我们理解.so文件的内部结构和内容。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

linux objdump命令,Linux objdump命令

一、简介 objdump命令是用查看目标文件或者可执行目标文件构成gcc工具。...obj 7)反汇编test中需要执行指令那些section objdump -d test 8)反汇编test中所有section objdump -D test 9)反汇编出源码(指定section...示例程序 我们用一个小程序,objdump命令解析 [objdump] 相关链接: 实例分析objdump反汇编用法 – 在路上 – CSDN博客 https://blog.csdn.net/...示例程序 我们用一个小程序, … linux grep命令 linux grep命令1.作用Linux系统中grep命令是一种强大文本搜索工具,它能使用正则表达式搜索文本,并把匹 配行打印出来.grep...Watcher 2. dataWatchers 一个Map JVM-1.编译 目录 一.编译器概述 二.编译器组成 三.示例 四.深入理解JVM中编译器 五.语法糖 六.补充 一

28.2K31

【线上故障】通过系统日志分析和定位

在之前文章中,我们有讲到如何定位内存泄漏和GDB调试-从入门实践到原理。今天,借助本文,分享另外一种更为棘手线上问题解决方案-如何在没有coredump文件情况下,定位程序崩溃原因。...前言 一个优秀程序员,编码能力和解决问题能力必不可少。编码能力体现是逻辑思维能力,而解决问题能力不仅仅依靠自己经验积累,更需要一定敏锐嗅觉和使用其他方式解决问题能力。...,希望借助本文,能够对你故障定位能力有一定帮助。...) 在上一节中,我们得到了程序发生错误时指令地址(0000003ab9a75f62)以及libc-2.12.so在进程中基址(3ab9a00000),下面我通过objdump命令进行分析。...反汇编 通过下述命令,得到libc-2.12.so汇编结果(因为内容较多,我们将其重定向输出到一个临时文件) objdump -tT /lib64/libc-2.12.so > ~/info 查找汇编语句

1.2K20

Linux 程序编译过程详解

为了便于初学者理解,在此介绍动态库与静态库概念: 如果要将多个.o目标文件生成一个文件,则存在两种类型库,一种是静态库,另一种是动态库。...在Linux系统中,可以用ldd命令查看一个可执行程序依赖共享库。 如果一个系统中存在多个需要同时运行程序且这些程序之间存在共享库,那么采用动态库形式将更节省内存。...ldd:可以用于查看一个可执行程序依赖共享库。 objcopy:将一种对象文件翻译成另一种格式,譬如将.bin转换成.elf、或者将.elf转换成.bin等。 objdump:主要作用是反汇编。...因此,C语言编译器通常需要一个C运行时库(C Run Time Libray,CRT)支持。C运行时库又常简称为C运行库。...反汇编ELF 由于ELF文件无法被当做普通文本文件打开,如果希望直接查看一个ELF文件包含指令和数据,需要使用反汇编方法。

1.8K30

linux常用命令--开发调试篇

前言 Linux常用命令中有一些命令可以在开发或调试过程中起到很好帮助作用,有些可以帮助了解或优化我们程序,有些可以帮我们定位疑难问题。本文将简单介绍一下这些命令。...示例程序 我们用一个小程序,帮助后面我们对这些命令描述,程序清单cmdTest.c如下: #include int test(int a,int b) { return a...打印elf文件可打印字符串--strings 例如你在代码中存储了一个版本号信息,那么即使编译成elf文件后,仍然可以通过strings搜索其中字符串甚至可以搜索某个.c文件是否编译在其中: strings...反汇编指定函数--objdump objdump用于展示elf文件信息,功能较多,在此不逐一介绍。...有时候我们需要反汇编定位一些问题,可以使用命令: objdump -d cmdTest #反汇编整个cmdTest程序 但是如果程序较大,那么反汇编时间将会变长,而且反汇编文件也会很大。

1.5K30

Linux 程序编译过程详解

为了便于初学者理解,在此介绍动态库与静态库概念:如果要将多个.o目标文件生成一个文件,则存在两种类型库,一种是静态库,另一种是动态库。...在Linux系统中,可以用ldd命令查看一个可执行程序依赖共享库。如果一个系统中存在多个需要同时运行程序且这些程序之间存在共享库,那么采用动态库形式将更节省内存。...ldd:可以用于查看一个可执行程序依赖共享库。objcopy:将一种对象文件翻译成另一种格式,譬如将.bin转换成.elf、或者将.elf转换成.bin等。objdump:主要作用是反汇编。...因此,C语言编译器通常需要一个C运行时库(C Run Time Libray,CRT)支持。C运行时库又常简称为C运行库。...,如果希望直接查看一个ELF文件包含指令和数据,需要使用反汇编方法。

1.9K30

Linux 程序编译过程来龙去脉

为了便于初学者理解,在此介绍动态库与静态库概念: 如果要将多个.o目标文件生成一个文件,则存在两种类型库,一种是静态库,另一种是动态库。...在Linux系统中,可以用ldd命令查看一个可执行程序依赖共享库。 如果一个系统中存在多个需要同时运行程序且这些程序之间存在共享库,那么采用动态库形式将更节省内存。...ldd:可以用于查看一个可执行程序依赖共享库。 objcopy:将一种对象文件翻译成另一种格式,譬如将.bin转换成.elf、或者将.elf转换成.bin等。 objdump:主要作用是反汇编。...因此,C语言编译器通常需要一个C运行时库(C Run Time Libray,CRT)支持。C运行时库又常简称为C运行库。...,如果希望直接查看一个ELF文件包含指令和数据,需要使用反汇编方法。

2.9K30

应用稳定性优化系列(二),CrashTombstone问题分析及定位

Tombstone问题定位方法 本节主要讲解Tombstone问题分析定位方法。 2.1 信号量分析法 信号机制是进程之间相互传递消息一种方法,下表展示是一些常见信号种类。...接着往下看,真正原因在下方调用栈: 一个JAVA方法通过JNI调用底层方法时,传入一个非法String,JNI在把这个String转换成char数组时导致失败。...假如进程号为2429,命令如下(需要root) : adbshell cat /proc/2429/maps>2429.txt,然后我们把fault addr, stack地址放到2429.txt里面查找...Objdump一下libandroid_runtime.so,如下: 可以看到各个对应偏移地址函数。...操作步骤 取出stack里面的地址 通过前面输出该进程内存分布图,分析该地址属于哪一个.so 把该栈地址减去对应.so基地址,就是偏移地址 把该偏移地址,放到objdump反编译文件里面找,就能找到对应方法

2.9K20

通过修改第三方soelf符号表兼容redhat6.2下低版本glibc

结论:通过16进制编辑器修改soelf符号表解决这个问题,即强制让so里依赖高版本gblic函数指向低版本glibc。...风险:有些函数在老版本下可能会出问题,具体需要多测试 首先评估so文件修改风险 通过ldd命令打印库文件所依赖共享库列表,发现so依赖glibc2.14版本 [root@bogon lee]# ldd...-T 查看so 动态符号,发现so使用glibc 2.14 版本 memcpy 函数 [root@bogon lee]# objdump -T libTaSESDK.so | grep GLIBC_...so指向2.2.5版本 修改elf readelf -sV libTaSESDK.so >1.txt 通过readelf 命令查看soELF 符号表 定位到 .gnu.version_r ,其表示二进制程序实际依赖文件版本...hash 值,vna_other 为对应 .gnu.version 表中符号版本值,vna_name 指向库名称字符串偏移量(也可以在 ELF 头中找到),vna_next 为下一个条目的位置(

1.3K20

ELF格式分析与常用工具以及不常见问题

答案是可以。但是gcc参数需要多加一个-m32。 dynamically linked:链接方式是动态链接。说明程序在执行之前还需要链接其他so。...在用户程序执行之前,需要先用解释器解释。 not stripped:没有strip过。一般编译时候,会带着-g选项,可以用来debug。那么会在binary中带有debug symbol。...4,*.a 想要编译静态链接库,需要先用gcc编译成*.o文件,把*.o文件使用ar命令打包即可。 5,section ? ELF格式是由一个或者多个section组成。...objdump一个比较少用又比较好用命令。有时候,需要分析汇编代码,这个时候,objdump就该闪亮登场了。...如果声明 了同一个两个实例,哪个实例先构造呢?聪明你可能会发现,先声明实例先执行构造,那么如果在不同.h文件中声明呢?怎么确定哪个先被引用到

2.1K70

CPU profiler(gperftools)在嵌入式系统上应用示例

按照上文方法,已经可以让自己测试程序test_capture生成性能分析报告 test_capture.prof。然后将test_capture交叉编译生成mips可执行文件。...然后复制到halley2开发板上运行(我是用开发板上SD卡存储程序),test_capture执行结束后,与在PC平台上一样生成性能分析报告 test_capture.prof。.../usr/bin/objdump: '/lib/libc-2.22.so': No such file /usr/bin/objdump: '/lib/libgcc_s.so.1': No such file.../usr/bin/objdump: '/lib/libm-2.22.so': No such file /usr/bin/objdump: '/lib/libpthread-2.22.so': No...pprof有一个参数--lib_prefix就是用来解决这个问题,执行google-pprof --help | grep lib_prefix就可以显示--lib_prefix用途: google-pprof

1.3K10

含大量图文解析及例程 | Linux下ELF文件、链接、加载与库(上)

共享(shared)目标文件:通常是.so动态链接库文件或者动态链接生成可执行文件。一种特殊类型可重定位目标文件,可以在加载或者运行时被动态地加载进内存并链接。...因为链接器在链接时候需要节头部表查看目标文件各个 section 信息然后对各个目标文件进行链接;而加载器在加载可执行程序时候需要程序头表 ,它需要根据这个表把相应段加载到进程自己虚拟内存...C语言中类型:C语言中其实是可以理解为没有类型,在C语言眼中只有内存和指针,也就是内存地址,而所谓C语言中类型,其实就是对这个地址一个解读。...C语言中类型概念:C语言中其实是可以理解为没有类型,在C语言眼中只有内存和指针,也就是内存地址,而所谓C语言中类型,其实就是对这个地址一个解读。...= DATA_SEGMENT_ALIGN … 我们可以通过objdump查看静态链接完成以后生成可执行文件a.out内容: objdump -d a.out 注意,这个a.outobjdump

2.8K52

吴章金: 如何创建一个*可执行*共享库

: 如何让共享库文件也可以直接执行 如何在可执行文件中用 dlopen 解析自身函数 这两个需求汇总起来,可以大体理解为如何让一个程序既可以作为共享库,又能够直接运行。.../libhello.so Segmentation fault (core dumped) 直接执行失败,再试试如何生成一个可执行文件加载运行它,这个是引用共享库通常做法: $ gcc -m32 -.../hello.noc hello 通过实验,可以确认“正常”创建出来共享库并不能够直接运行,而是需要链接到其他可执行文件中。.../libhello.so hello... 让共享库可执行 下面探讨另外一种方式,在生成共享库基础上,研究怎么让它可以执行。...我们在程序中主动加入一个 .interp 节区指定动态链接器吧。

1.1K20

linux后台开发常用调试工具

对于一个已定义符号,将会找出这个符号定义行号,对于未定义符号,显示为空) -n 根据符号地址排序(默认是按符号名称字母顺序排序) -u 只列出未定义符号...程序可用于列举符号及其类型和值,但是,要更仔细地研究目标文件中这些命名段内容,需要使用功能更强大工具。...其中两种功能强大工具是objdump和readelf。 readelf工具使用来显示一个或多个ELF格式文件信息GNU工具。使用不同参数可以查看ELF文件不同信息。...ldd(显示程序需要使用动态库和实际使用动态库) # ldd /bin/ls linux-gate.so.1 => (0xbfffe000) librt.so.1.../var/log/lastlog 记录所有用户最近信息。这不是一个ASCII文件,因此需要用lastlog命令查看内容。

3.8K151

Android JNI Crash定位步骤

如果发现so被strip,尝试在CMake添加如下配置: # 这几行代码表示debug版本so文件保留so保留符号库,这样会导致so文件很大, # 如果要让release版本保留符号库文件,就替换成CMAKE_C_FLAGS_RELEASE...被stripso readelf结果里“section headers”个数会比未strip后少,所以可以根据readelf判断so是否是真的被strip了 命令格式: arm-linux-androideabi-readelf...命令格式: arm-linux-androideabi-readelf -a xx.so > fun.txt # 注意:仍需要使用未strip之前so文件, 上面的命令会把结果写入fun.txt arm-linux-androideabi-objdump...可以获取so文件符号表信息,可以看到编译进来所有方法以及调用堆栈地址....命令格式: arm-linux-androideabi-objdump -dx xx.so > stacktrace.txt 或 aarch64-linux-android-objdump -dx xx.so

2.8K10

如何优雅调试段错误

从提示中还可以看到出错文件是 libc-2.27.so,用 ldd 查看目标程序 a.out 依赖库,找到 libc-2.27.so 具体路径。...objdump 命令查看函数列表,因为得到 0005b3cc 不一定是某个函数首地址,所以我们可以用前缀 5b3  进行一下过滤。...第三板斧 我们可以继续再分析下,前面的 objdump 只能看到汇编代码,是因为 /lib/x86_64-linux-gnu/libc.so.6 这个库是不包含符号文件,这种情况看不到源码信息,我们再寻找下本机有没有安装...%p 再次执行 a.out 就会在 /var/log 下产生 core dump 文件,用 gdb 分析该 dump,第一个参数是可执行文件,第二个参数是 dump 文件 # gdb a.out /var...,因为我们前面下载了源码文件,所以出错文件,行号,代码等都显示了出来,另外一个有用信息是 _IO_vfprintf_internal 函数参数都显示了出来,很明显第一个参数 s 指向一个 0x0

4.5K52

吴章金: 深度剖析 Linux共享库“位置无关”实现原理

,就是可以被多个可执行文件共享,以达到节省磁盘和内存空间目标: 共享意味着不仅磁盘上只有一份拷贝,加载到内存以后也只有一份拷贝,那么代码部分在运行时也不能被修改,否则就得有多个拷贝存在 同时意味着,需要能够灵活映射在不同虚拟地址空间...什么是位置无关 同样以 hello.c 为例: #include int main(void) { printf("hello\n"); return 0; } 以普通方式编译并反汇编一个可执行文件看看...动态链接器会负责找到可执行文件共享库并装载它们,所以动态链接器是知道这个 Load Address ,那么函数符号其实是很容易确定,来看看不带 -fpic 时编译生成一个共享库: 查看 main...函数初始地址 $ gcc -m32 -shared -o libhello.so hello.c $ objdump -d libhello.so | grep -A 2 "main>:" 000004a9...,即 ebx 需要 $_GLOBAL_OFFSET_TABLE_ 计算,这个是用来做动态地址重定位,暂且不表。

1.7K20

升级Php Curl扩展遇到

线上服务器php引用curl扩展依赖curl库版本是7.29.0,业务想升级到7.71以上版本,因为这个版本支持域名配置HOST,即做一个后台推送功能,在后台配置后,要推送到前端每台服务器上,前端服务器提供了一个只供内部访问域名和接口用于更新配置...,因为前端服务端有多台,所以需要配置相同域名,但用不同IP,假设前端接口地址为 www.abc.com/updateConfig,有以下机器: 172.21.107.36 172.21.107.35...因为curl扩展是静态编译进PHP可执行文件,因此需要重新下载新curl库,这里不讨论细节了,可以在官网:https://curl.haxx.se/download.html 下载就行,简单configure...: php -r 'var_dump(curl_version());' 然后用objdump查看php文件引入curl库情况: objdump -x /opt/php/bin/php|grep...发现引用库版本为libcurl.so.4,然后发现这个文件一个软链,指向/usr/lib64/libcurl.so.4.3.0 ll /usr/lib64/libcurl.so.4 ?

1.9K20

偶遇 SSH rootkit,我服务器基本全军覆没

迁移过程完全是手工操作,没有粗暴对拷数据,认真的整理了哪些服务已经不需要了,也重新规划了目录结构和权限。...相关日志信息可能会被抹除而无法查询,文件修改时间也会被改到一个以前时间迷惑你(stat 看 change 时间可以发现问题),还把 rpm 相关签名信息改掉,你通过 rpm 检查包签名也是查不出来...我遇到变种基本可以通过 objdump 查看 libkeyutils.so 有奇怪 libxxx.so 依赖判断受感染,这个 libxxx.so 上传到 virustotal 站点是可以识别出来...在善后问题处理上面,我发现 clamav 有奇效,可以扫描出受感染文件。...我处理方法: objdump -x /lib64/libkeyutils.so.XXX | grep NEEDED 确认入侵痕迹,会依赖一个不知名libxxx.so yum reinstall keyutils-libs

1.3K10

一组 Redis 实际应用中异常场景及其根因分析和解决方案

* 0000000000000000 GLIBC_2.14 memcpy 输入命令:objdump -T /lib64/libc.so.6 | fgrep memcpy, 查看安装环境支持 memcpy...-T /lib/x86_64-linux-gnu/libc.so.6 | fgrep memcpy 查看编译机支持 memcpy 版本: compile_ENV:# objdump -T /lib/...解决方案 升级安装环境 GLIBC 版本,这显然是非常不明智,无异于削足适履; 统一编译环境和安装环境,消除版本差异,这种方案需要满足一个约束:安装环境版本可控。...:asm(".symver memcpy,memcpy@GLIBC_2.2.5"); 【注意】只需在调用函数 memcpy 文件中加入此约束 解决方案验证例子 【步骤 1】编写一个简单 C 测试程序...36 lastVoteEpoch 36 故障节点 nodes-xxx.conf 最后一行形式: vars currentEpoch Redis 集群一旦创建完成,每一个节点都会生成一个保存集群基本信息配置文件

2.1K41
领券