Android - NDK 共享库使用 nm / objdump 提取相关 JNI 挂钩

2023-12-14

我正在尝试从包含 JNI 粘合代码的共享库中提取相关符号,但 nm 似乎没有足够的帮助。方法签名不存在,所以我不知道要传递哪些参数。

有任何想法吗?

bash-3.2# ./arm-linux-androideabi-nm -D ~/Desktop/backup/whiteBox/libamplayerjni.so | grep Java
00030d6c T Java_com_farcore_playerservice_AmPlayer_GL2XScale
00030da8 T Java_com_farcore_playerservice_AmPlayer_close
00030d74 T Java_com_farcore_playerservice_AmPlayer_disable2X2XYScale
...

objdump 也没有多大帮助

bash-3.2# ./arm-linux-androideabi-objdump -TC ~/Desktop/backup/whiteBox/libamplayerjni.so | grep Java
00030c00 g    DF .text  00000008 Java_com_farcore_playerservice_AmPlayer_getDivxInfo
00030c08 g    DF .text  00000008 Java_com_farcore_playerservice_AmPlayer_setIVolume
00030c10 g    DF .text  00000008 Java_com_farcore_playerservice_AmPlayer_mute
00030c18 g    DF .text  00000008 Java_com_farcore_playerservice_AmPlayer_unmute
00030c20 g    DF .text  00000008 Java_com_farcore_playerservice_AmPlayer_setVideoBlackOut

由于 JNI 使用 C 调用约定 (cdecl),因此函数签名中没有参数信息。您需要分析相应的java(dalvik)代码来找出参数类型。

这是我的 jni 库:

00001408 g    DF .text  0000000a Java_info_kghost_android_openvpn_FileDescriptorHolder_close
00001a14 g    DF .text  00000198 Java_info_kghost_android_openvpn_ManagementSocket_read__ILjava_nio_ByteBuffer_2II
00001414 g    DF .text  0000000c Java_info_kghost_android_openvpn_ManagementSocket_shutdown
000017c4 g    DF .text  00000250 Java_info_kghost_android_openvpn_ManagementSocket_read__ILjava_nio_ByteBuffer_2IILinfo_kghost_android_openvpn_FileDescriptorHolder_2
0000142c g    DF .text  00000200 Java_info_kghost_android_openvpn_ManagementSocket_write__ILjava_nio_ByteBuffer_2IILinfo_kghost_android_openvpn_FileDescriptorHolder_2
00001420 g    DF .text  0000000a Java_info_kghost_android_openvpn_ManagementSocket_close
0000162c g    DF .text  00000198 Java_info_kghost_android_openvpn_ManagementSocket_write__ILjava_nio_ByteBuffer_2II
00001bd4 g    DF .text  000000d4 Java_info_kghost_android_openvpn_ManagementSocket_open

如果没有重载方法,签名不会包含参数信息;如果方法被重载,签名将在函数名称中包含参数信息。

并且在使用native方法之前需要显式加载jni库:

System.loadLibrary("your-library-name");

确保你的库放在里面LD_LIBRARY_PATH, /libAndroid 上的目录,检查 mmap (/proc/pid/maps)查看是否加载成功。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - NDK 共享库使用 nm / objdump 提取相关 JNI 挂钩 的相关文章

随机推荐

  • 更改任务栏组的图标(Win7)

    Using LoadImage我更改了组中所有窗口的图标 但是组图标不会改变 如何将相应的组获取到窗口并设置其图标 组图标来自 EXE 文件本身 在多个 EXE 属于同一组的情况下 我想任务栏有某种算法来决定从哪个 EXE 中提取图标 没有
  • MVC3 @html.radiobuttonfor

    这是我的课程 public class QuestionClass public static FeedbackDatabaseDataContext context new FeedbackDatabaseDataContext publ
  • 如果值超出范围,Ruby 优雅地返回最小值/最大值

    所以我正在编写一个程序来模拟流程并需要计算费用 逻辑是 如果费用金额小于最小值 则使用最小值 如果费用金额大于最大值 则使用最大值 我当然可以在多行上实现这一点 但我很想知道是否有更优雅的方法可以在 Ruby 中实现这一点 fee amou
  • 如何在couchdb中执行“不等于”?

    各位 我想知道什么是建模文档和 或映射函数的最佳方法 允许我进行 不等于 查询 例如我的文档是 1 name George 2 name Carlin 我想触发一个查询 返回名称不等于 John 的每个文档 注意 我事先没有所有可能的名称
  • 更新配置文件(分发)并保持当前应用商店应用程序正常运行

    我在应用程序商店中有一个应用程序 它使用的 iOS 配置文件 分发 无效 此配置文件包含推送证书 所以我想要重新生成Provisinig Profiles 问 当我通过更新 Provisioning Profile 更新 Appstore
  • Xcode 中的 fstream 遇到问题

    我在验证函数中用于输入目的的 REGISTER txt 是否存在时遇到问题 见下文 我的理解是 如果文件不存在 则文件不会被打开 文件流变量 inData 将为假 因此 我可以在 if else 语句中使用该变量来验证它是否打开 但即使 R
  • 使用 Firebase photoURL 时显示的图像损坏

    我使用 firebase 电子邮件和密码身份验证来注册用户 并将用户的 photoURL 设置为用户上传的图像 当我将图像的 src 设置为 user photoURL 时 图像不会显示 但当我检查代码时 我可以看到 src photoUR
  • 事务性保存而不调用更新方法

    我有一个用 Transactional 注释的方法 我从 Oracle DB 检索一个对象 更改一个字段 然后从该方法返回 我忘记保存对象 但发现数据库无论如何都会更新 应用上下文
  • 阻止除 AJAX 请求之外对 PHP 文件的直接访问?

    我希望有一个使用 AJAX 访问 PHP 文件的网页 ajax file ajax php 问题是 我不希望人们能够在浏览器中键入地址来直接访问该 PHP 文件 有没有办法让只有 AJAX 请求才能访问该文件 我可以在 PHP 文件中检查一
  • JFrame 对象的垃圾收集器

    import javax swing public class Main public Main JFrame jf new JFrame Demo jf setDefaultCloseOperation JFrame EXIT ON CL
  • 按表达式树进行多列分组

    根据帖子引用属性的 LINQ 表达式感谢 Daniel Hilgarth 的帮助 我已经实现了 Group By Extension 我需要帮助来扩展 GroupByMany 如下所示 unitOfWork MenuSetRepositor
  • 为 PHP 设置 Apache 时遇到问题

    我对 PHP 非常陌生 我正在尝试设置我的 apache 开发服务器 但遇到了很多麻烦 我安装了 XAMPP 但无法让 apache 正常启动 我读到我可能遇到端口问题 但是我确实将端口从默认值 80 更新为 8080 配置中的 监听 但这
  • 当我执行syncdb时,Django出现UnicodeDecodeError

    我尝试使用 MySQL 设置 Django 但出现 UnicodeDecodeError 您能让我知道如何解决这个问题吗 我搜索了有关错误的信息 但我无法理解 我找到了这些代码并尝试了 def unicode self return str
  • 在两台笔记本电脑上使用 git,没有裸仓库

    我已经在我的第一台笔记本电脑上开始了项目 git init 然后开始工作 明天我要去度假 我想随身携带我的小型笔记本电脑 并时不时地参与项目 我通过 ssh 从更大的笔记本电脑克隆存储库 git clone ssh address 当我回来
  • 从 CGPoint 获取 SCNVector3

    我正在尝试从 CGPoint 获取 SCNVector3 我正在使用手势识别器来获取触摸的位置 作为 CGPoint 问题是 当我进行测试时 触摸并不总是会击中某些东西 因为并不总是有物体被触摸 触摸一个空的地方 将你的船移动到那个空的地方
  • 解析逗号分隔的字符串,其中一些子字符串用双引号引起来

    尝试解析所有数据都用双引号括起来的 csv 文件 因为双引号中可能有逗号 看起来像这样 songs 1 2 3 4 I Love You Plain White T s CBE10 22 15 CBE10 22 CB 984 10 05 1
  • 如何避免手动将 $registry 容器传递到我创建的每个新类的构造函数中?

    我一直在做MVC几个月来 我把所有东西都储存在我的 注册表目的 当我创建一个新类时 我通常只传递注册表 但我必须不断地传递 this gt registry创建新类时 e g class something public function
  • Typescript 重载箭头函数

    所以我们可以这样做 export function myMethod param number number export function myMethod param string string export function myMe
  • 从 Spyder 关闭远程内核

    我在集群上使用远程内核 并使用 Spyder 连接到该集群 为此 我在集群上启动我的内核python m spyder kernels console 然后 我将在 jupyter 运行时目录中创建的 json 文件复制传输到本地计算机 然
  • Android - NDK 共享库使用 nm / objdump 提取相关 JNI 挂钩

    我正在尝试从包含 JNI 粘合代码的共享库中提取相关符号 但 nm 似乎没有足够的帮助 方法签名不存在 所以我不知道要传递哪些参数 有任何想法吗 bash 3 2 arm linux androideabi nm D Desktop bac