WebRTC-导出纯C函数到so动态库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebRTC-导出纯C函数到so动态库相关的知识,希望对你有一定的参考价值。
参考技术A 基于WebRTC进行二次开发,难免会需要对源码进行修改、增加文件,然后生成动态库供上层调用。但由于WebRTC是用ninja编译的,还是有些配置需要修改的,否则我们只能干瞪眼看着SDK调用放调用不到自己写的类和方法。下面我就总结下我增加纯C函数供JNI层调用的过程。(新建的文件、目录根据自己需求来哈,流程是一致的)
1、 src/api/crypto/ 目录新增头文件 packet_observer.h ,导出接口中的函数一定要为纯虚函数。
2、新增源文件 packet_observer_register.cc ,对导出声明变量一定要再定义变量。
1、找到 src/api/crypto/BUILD.gn ,增加新增文件编译依赖,在最下面增加以下内容:
2、找到 src/api/BUILD.gn ,增加上一步在子目录 src/api/crypto/BUILD.gn 中增加的编译依赖源。
1、进入src/build/android/android_only_jni_exports.lst文件,增加需要导出的C函数。
WebRTC使用ninja编译的,而整个项目是从 src/BUILD.gn 开始执行,所有依赖都是在各个子目录里配置的 BUILD.gn ,然后父母录会去遍历子目录的 BUILD.gn ,这样整个项目的编译配置就都由各自目录里来管理。
Android 逆向Android 中常用的 so 动态库 ( libm.so 数学函数动态库 | liblog.so 日志模块动态库 | libselinux.so 安全模块动态库 )(
一、libm.so 数学函数动态库
libm.so
是数学相关函数库 , 该动态库是 libc.so 动态库的依赖库 , 是最基础的函数库 ;
执行
cp /system/lib/libm.so /sdcard/Pictures
命令 , 将 libm.so 动态库拷贝到 /sdcard/Pictures 目录 , 之后可以将其拷贝到文件系统 ;
使用 64 位 IDA 分析该动态库 , 该动态库都定义的都是数学相关的函数 , 如 coshl 三角函数 , logl 对数函数 , 等 ;
二、liblog.so 日志模块动态库
liblog.so
是日志模块的动态库 , 所有的日志打印 , 都使用的这个库 ;
执行
cp /system/lib/liblog.so /sdcard/Pictures
命令 , 将 liblog.so 动态库拷贝到 /sdcard/Pictures 目录 , 之后可以将其拷贝到文件系统 ;
三、libselinux.so 安全模块动态库
libselinux.so
是安全模块的动态库 ;
执行
cp /system/lib/libselinux.so /sdcard/Pictures
命令 , 将 libselinux.so 动态库拷贝到 /sdcard/Pictures 目录 , 之后可以将其拷贝到文件系统 ;
使用 64 位 IDA 分析该动态库 ;
以上是关于WebRTC-导出纯C函数到so动态库的主要内容,如果未能解决你的问题,请参考以下文章
用dll注入工具显示“动态链接库文件未导出“函数名”借口函数”是啥问题,如何解决
Android 逆向Android 中常用的 so 动态库 ( libm.so 数学函数动态库 | liblog.so 日志模块动态库 | libselinux.so 安全模块动态库 )(
Android 逆向Android 中常用的 so 动态库 ( libm.so 数学函数动态库 | liblog.so 日志模块动态库 | libselinux.so 安全模块动态库 )(