当前位置: 首页 > news >正文

Android readelf 工具查找函数符号

ELF(Executable and Linkable Format)是一种执行文件和可链接文件的格式。它是一种通用的二进制文件格式,用于在各种操作系统中存储可执行程序、共享库和内核模块。

Android 开发当中的 so 库本质上就是一种特殊类型的 ELF 文件,但在用途上它更专注于共享库的功能

so 库通常被设计为在程序运行时动态加载和链接,以提供代码、函数和数据等共享资源给其他程序使用。而可执行程序的 ELF 文件则是一个独立的程序,可以直接运行。因此,在使用方式和加载方式上有所不同,但它们都可以使用相同的 ELF 文件格式进行存储和组织。

readelf 是一个用于显示 ELF 文件的信息的工具,它可以显示 ELF 文件的各个部分的详细信息,例如头部信息、节(section)表、符号表、动态重定位表等。通过使用 readelf,开发者可以查看和分析 ELF 文件的结构和内容,以便了解和调试程序的执行过程。比如在进行 Native Hook 时,需要查看一个 so 库中的函数符号表,就可以使用这个工具进行查看。


在 Android 开发中,NDK 包中就已经包含了 readelf 工具了:

/AndroidSDK/ndk/21.0.6113669/toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64/bin/aarch64-linux-android-readelf.exe

这是我电脑中 readelf 的路径,但我发现在 /toolchains/ 中有很多地方都有 readelf 文件且都能正常使用,把 readelf 配置一下环境变量就能正常使用了

使用命令来查看 so 库的节头表信息:

readelf -sW libxxx.so

libxxx.so 需要自行替换想要查看的 so库。但是把所有信息都输出到命令行实在是太多且难以查看,所以最好是输出到一个文件中方便我们来查找需要的信息:

readelf -sW libxxx.so > output.txt

这里我是把信息都输出到一个 txt 文件上了,然后在 txt 文件上直接搜索函数名就会出来对应的函数符号(因为函数符号是包含函数名的


举个例子:

在 C++ 文件中创建一个函数 readelf_native_funtion:

通过一些列操作编译成 so 库(gradle 配置 + Cmake 配置 + mergeReleaseNativeLibs)

然后在 build/intermediates/merged_native_libs/ 找到自己编译好的 so 库,运行 readelf 后打开 txt 文件:

就可以查询到函数 readelf_native_funtion 对应的函数符号是 _Z22readelf_native_funtionv

http://www.lryc.cn/news/278181.html

相关文章:

  • MySQL-索引回顾
  • 重新认识Elasticsearch-一体化矢量搜索引擎
  • 【附源码】基于SSM框架的房屋租赁系统的设计与实现
  • [SpringBoot]如何在一个普通类中获取一个Bean
  • [ERROR] 不再支持目标选项 5。请使用 7 或更高版本
  • EasyMR:为 AI 未来赋能,打造弹性大数据引擎的革命
  • C //练习 4-10 另一种方法是通过getline函数读入整个输入行,这种情况下可以不使用getch与ungetch函数。请运用这一方法修改计算器程序。
  • 竞赛保研 基于深度学习的行人重识别(person reid)
  • Ncast盈可视 高清智能录播系统 IPSetup.php信息泄露+RCE漏洞复现(CVE-2024-0305)
  • GO语言Context的作用
  • 金和OA C6 upload_json 任意文件上传漏洞
  • 大模型学习第四课
  • Code Runner使用外部控制台,运行结束后等待用户输入
  • IC设计的前端和后端是如何区分的?
  • Unity WebView 中文输入支持
  • x-cmd pkg | trdsql - 能对 CSV、LTSV、JSON 和 TBLN 执行 SQL 查询的工具
  • Camunda Spin
  • strlen/Memcpy_s/strncasecmp
  • 水经微图安卓版APP正式上线!
  • 数据结构第十二弹---堆的应用
  • [NSSRound#3 Team]This1sMysql
  • Android 通知简介
  • QT开发 2024最新版本优雅的使用vscode开发QT
  • Redis性能大挑战:深入剖析缓存抖动现象及有效应对的战术指南
  • 基于SpringBoot的教学管理系统
  • 机器学习之独热编码(One-Hot)
  • IIS+SDK+VS2010+SP1+SQL server2012全套工具包及安装教程
  • 【昕宝爸爸小模块】HashMap用在并发场景存在的问题
  • 数据库索引
  • 开源知识库工具推荐:低成本搭建知识库