android dlopen一个so,Android7.0对dlopen的改变
两个内存段
在同一个进程空间中dlopen一个.so文件,理论上在内存中是同一片区域,但实际调试中发现Android7.0(read "/proc/self/maps")中,先后读同一个.so内存中居然出现两个段!
这在低版本Android(比如4.x)中不曾出现。
如下一些blog中分析,与Android7.0对dlopen的改写有关,可能是不同命名空间下读取结果不一样,可能是对安全性的提升。
NDK 应用链接至平台库
7.0对已加载.so的引用/Hook
由于以上分析,自己的代码中dlopen的.so文件与目标程序中加载的.so在不同内存段中,故不能直接Hook,要想方法拿到目标程序加载的.so的内存地址。
可以用base_addr + offset得到目标方法的地址,base_addr通过查找 “/proc/self/maps” 得到
//这个方法来自 android inject 用于获取地址
void* get_module_base(int pid, const char* module_name)
{
FILE *fp;
long addr = 0;
char *pch;
char filename[32];
char line[1024];
if (pid < 0) {
/* self process */
snprintf(filename, sizeof(filename), "/proc/self/maps", pid);
}
else {
snprintf(filename, sizeof(filename), "/proc/%d/maps", pid);
}
fp = fopen(filename, "r");
if (fp != NULL) {
while (fgets(line, sizeof(line), fp)) {
if (strstr(line, module_name)) {
pch = strtok(line, "-");
addr = strtoul(pch, NULL, 16);
if (addr == 0x8000)
addr = 0;
break;
}
}
fclose(fp);
}
return (void *)addr;
}
参考blog:
android dlopen一个so,Android7.0对dlopen的改变相关推荐
- dlopen android 权限,Android7.0对dlopen的改变——读取私有.so结果变化
两个内存段 在同一个进程空间中dlopen一个.so文件,理论上在内存中是同一片区域,但实际调试中发现Android7.0(read "/proc/self/maps")中,先后读 ...
- android7dlopen,Android7.0对dlopen的改变
两个内存段 在同一个进程空间中dlopen一个.so文件,理论上在内存中是同一片区域,但实际调试中发现Android7.0(read "/proc/self/maps")中,先后读 ...
- android状态栏半透明灰色,Android7.0沉浸式状态栏蒙灰问题完美解决
DecorView是Window的顶层view, 也就是说我们所有的控件都是包含在这个view中的. android7.0之前这个类是PhoneWindow的一个内部类, 7.0之后是一个独立的类, ...
- android怎样降版本,Android7.0 APP降级方法
Android7.0平台使用shell命令安装app时需要指定app包名和user. pm install 参数含义: pm install [options] -r: 覆盖安装已存在Apk,并保持原 ...
- android 7下载地址,Android7.0下载地址 安卓7.0系统手机下载安装教程
安卓系统几乎是普及了所有人的手机,虽然6.0的安装率有点惨不忍睹,但是最近谷歌又有了新动作,在即将推出的安卓7.0系统又有哪些值得我们期待的功能呢?下面和小编一起去看看吧! 虽然Android 6.0 ...
- android 禁用dlsym_Android7.0对dlopen的改变——读取私有.so结果变化
两个内存段 在同一个进程空间中dlopen一个.so文件,理论上在内存中是同一片区域,但实际调试中发现Android7.0(read "/proc/self/maps")中,先后读 ...
- Android开发之下载Apk安装的方法兼容Android7.0和8.0及以上
具体查看代码: 首先在清单文件配置三个权限读写权限和请求安装权限(兼容Android8.0手机)如下: <!--安装apk权限--><uses-permission android: ...
- mac下charles抓android7.0的包
https://blog.csdn.net/u011045726/article/details/76064048 https://blog.csdn.net/cadi2011/article/det ...
- Android7.0新特性Jack server
准备 今天正式担任Android7.0(N)项目模块的开发和维护工作,借此机会git和make了一套系统代码用来研究.在编译的过程中,与以往系统不同的是Android7.0系统编译工具链使用了全新的J ...
最新文章
- 计算机网络工程实用技术考试,计算机网络实用技术期中考试复习题.doc
- 程序开发工具java_15款Java程序员必备的开发工具
- uiautomatorviewer 双击闪退问题解决
- 第一章 基础设施,1.3 阿里视频云ApsaraVideo是怎样让4000万人同时狂欢的(作者:蔡华)...
- 分布式系统之通信技术学习
- 【渝粤教育】国家开放大学2018年秋季 0299-21T中国古代文学(1) 参考试题
- react学习(7)----react转换值同render
- wince下Gpio 驱动程序
- bba70_BBA的完整形式是什么?
- C# Winform 窗体美化(九、嵌入窗体)
- Qt文档阅读笔记-Qt Core的官方解析
- ios-实现ARC与MRC混编
- Vue使用vue-cli基于脚手架编写项目_自己编写一个vue基本项目_认识项目结构---vue工作笔记0019
- PDF转CAD格式步骤再简单
- VVC学习之五:帧内预测——MPM列表建立
- 无线路由器的DNS服务器怎么设置,无线路由器DNS的设置方法
- word表格分开快捷键_Word快捷键一览表
- Netron 模型可视化神器,保存好的模型丢进去就能可视化!
- c语言 交通处罚单管理程序 typedef struct,交通罚单.doc
- 刨根问底:linux中bash shell中SIGHUP和SIGTERM信号的处理
热门文章
- 基础八股文精简背诵版!
- OA系统是什么,企业邮箱OA系统如何使用?
- 【C语言内功】“数据在内存中的存储“
- rapidjson Stream
- 5.17 吸管工具和度量工具的使用 [Illustrator CC教程]
- DevComponents.DotNetBar2之SuperTabControl使用技巧
- 为什么python注释不能中文_python注释中文
- 卓文翔_3137102334_实验2
- Android手机渗透测试神器 zANTI(汉化版)
- 原码、补码、反码、移码的介绍与比较