两个内存段

在同一个进程空间中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的改变相关推荐

  1. dlopen android 权限,Android7.0对dlopen的改变——读取私有.so结果变化

    两个内存段 在同一个进程空间中dlopen一个.so文件,理论上在内存中是同一片区域,但实际调试中发现Android7.0(read "/proc/self/maps")中,先后读 ...

  2. android7dlopen,Android7.0对dlopen的改变

    两个内存段 在同一个进程空间中dlopen一个.so文件,理论上在内存中是同一片区域,但实际调试中发现Android7.0(read "/proc/self/maps")中,先后读 ...

  3. android状态栏半透明灰色,Android7.0沉浸式状态栏蒙灰问题完美解决

    DecorView是Window的顶层view, 也就是说我们所有的控件都是包含在这个view中的. android7.0之前这个类是PhoneWindow的一个内部类, 7.0之后是一个独立的类, ...

  4. android怎样降版本,Android7.0 APP降级方法

    Android7.0平台使用shell命令安装app时需要指定app包名和user. pm install 参数含义: pm install [options] -r: 覆盖安装已存在Apk,并保持原 ...

  5. android 7下载地址,Android7.0下载地址 安卓7.0系统手机下载安装教程

    安卓系统几乎是普及了所有人的手机,虽然6.0的安装率有点惨不忍睹,但是最近谷歌又有了新动作,在即将推出的安卓7.0系统又有哪些值得我们期待的功能呢?下面和小编一起去看看吧! 虽然Android 6.0 ...

  6. android 禁用dlsym_Android7.0对dlopen的改变——读取私有.so结果变化

    两个内存段 在同一个进程空间中dlopen一个.so文件,理论上在内存中是同一片区域,但实际调试中发现Android7.0(read "/proc/self/maps")中,先后读 ...

  7. Android开发之下载Apk安装的方法兼容Android7.0和8.0及以上

    具体查看代码: 首先在清单文件配置三个权限读写权限和请求安装权限(兼容Android8.0手机)如下: <!--安装apk权限--><uses-permission android: ...

  8. mac下charles抓android7.0的包

    https://blog.csdn.net/u011045726/article/details/76064048 https://blog.csdn.net/cadi2011/article/det ...

  9. Android7.0新特性Jack server

    准备 今天正式担任Android7.0(N)项目模块的开发和维护工作,借此机会git和make了一套系统代码用来研究.在编译的过程中,与以往系统不同的是Android7.0系统编译工具链使用了全新的J ...

最新文章

  1. 计算机网络工程实用技术考试,计算机网络实用技术期中考试复习题.doc
  2. 程序开发工具java_15款Java程序员必备的开发工具
  3. uiautomatorviewer 双击闪退问题解决
  4. 第一章 基础设施,1.3 阿里视频云ApsaraVideo是怎样让4000万人同时狂欢的(作者:蔡华)...
  5. 分布式系统之通信技术学习
  6. 【渝粤教育】国家开放大学2018年秋季 0299-21T中国古代文学(1) 参考试题
  7. react学习(7)----react转换值同render
  8. wince下Gpio 驱动程序
  9. bba70_BBA的完整形式是什么?
  10. C# Winform 窗体美化(九、嵌入窗体)
  11. Qt文档阅读笔记-Qt Core的官方解析
  12. ios-实现ARC与MRC混编
  13. Vue使用vue-cli基于脚手架编写项目_自己编写一个vue基本项目_认识项目结构---vue工作笔记0019
  14. PDF转CAD格式步骤再简单
  15. VVC学习之五:帧内预测——MPM列表建立
  16. 无线路由器的DNS服务器怎么设置,无线路由器DNS的设置方法
  17. word表格分开快捷键_Word快捷键一览表
  18. Netron 模型可视化神器,保存好的模型丢进去就能可视化!
  19. c语言 交通处罚单管理程序 typedef struct,交通罚单.doc
  20. 刨根问底:linux中bash shell中SIGHUP和SIGTERM信号的处理

热门文章

  1. 基础八股文精简背诵版!
  2. OA系统是什么,企业邮箱OA系统如何使用?
  3. 【C语言内功】“数据在内存中的存储“
  4. rapidjson Stream
  5. 5.17 吸管工具和度量工具的使用 [Illustrator CC教程]
  6. DevComponents.DotNetBar2之SuperTabControl使用技巧
  7. 为什么python注释不能中文_python注释中文
  8. 卓文翔_3137102334_实验2
  9. Android手机渗透测试神器 zANTI(汉化版)
  10. 原码、补码、反码、移码的介绍与比较