两个内存段

在同一个进程空间中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:

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

  1. android dlopen一个so,Android7.0对dlopen的改变

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

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

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

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

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

  4. 【Android】Android7.0和Android2.1源生代码目录及框架分析

    Android源代码结构: Android7.0整体结构 各个版本的源码目录基本类似,编译后的源码目录会生成out文件夹,用来存储编译产生的文件(例如.img等文件). Android7.0的根目录结 ...

  5. Android9.0 代码注入,[原创]Android9.0 hook dlopen问题/如何hook dlopen相关函数

    Android9.0中在activity的onCreate之前hook dlopen函数,如果需要返回值(即修改了LR寄存器),那么会触发:E/libEGL: EGL_ANDROID_blob_cac ...

  6. Android踩坑日记:android7.0动态相机权限

    前提: 项目中使用的动态权限开源库github:https://github.com/yanzhenjie/AndPermission. 转载必须注明本文转自严振杰的博客:http://blog.cs ...

  7. Android 一行代码搞定将错误日志放入到sd卡中且不需要任何权限,适配到android7.0

    Android 一行代码搞定将错误日志放入到sd卡中且不需要任何权限,适配到android7.0 之前所有的项目都有一个将崩溃日志写入到sd卡的工具类,然后每次项目新建都从老项目copy过来,后来慢慢 ...

  8. android 7.0权限组,huawei p9 plus(VIE-AL10)Android7.0/EMUI5.0更新动态交流

    现在的版本概述: Android6.0: EMUI4.1,b195 EMUI4.1,b198(测试版) Android7.0: EMUI5.0:b198(体验用户及内测可获取) ...... 请各位内 ...

  9. 嵌入式Linux支持dlopen,Android下使用dlopen函数动态调用.so链接库

    在这篇文章([09.03.25]Linux环境中dlopen函数的简单应用)中.实现了在UBUNTU LINUX环境下使用dlopen函数动态调用.so链接库.但是也提到了在Android下未能成功. ...

最新文章

  1. 字符串string和内存流MemoryStream及比特数组byte[]互转
  2. 前端学习(731):函数的使用
  3. java 数组 equals_java中用equals比较两个内容相同的字符数组
  4. 百度java的线程技术_自我提升(基础技术篇)——java线程简介
  5. linux perl 安装目录,linux-将Perl模块安装到特定位置
  6. PC介绍之PCIE、总线、内存、电源
  7. 对正则表达式又重新学了一遍,笔记方便以后查阅
  8. “产学合作勇创新·协同育人书新篇”贵州理工大数据学院数据科学训练营结题答辩报告会圆满举行...
  9. Python Socket(未编辑)
  10. 中原工学院计算机网络,计算机网络 考试重点 中原工学院.doc
  11. AsyncTask的理解和使用
  12. ios射击类游戏简单代码射击
  13. 过河问题(贪心算法)(python)
  14. 二阶可导的充要条件_可导函数在x
  15. 数据库系统概论--第六章 关系数据理论
  16. LeetCode刷题笔记2——数组2
  17. Egret 使用Texture Merger制作美术字体
  18. 液晶屏COG封装技术-工业显示领域主流
  19. 最新最全论文合集——丘成桐数学科学中心
  20. C# Windows-API-Code-Pack for .Net

热门文章

  1. quill编辑器使用
  2. 思维之道。 文/江湖一剑客
  3. 两个Python小游戏
  4. 解决Docker容器无法停止删除的问题
  5. 苹果母座解码芯片、Lightning苹果母座解码I.C
  6. 求集合数据的均方差pta
  7. 百度云服务器有哪些优势?
  8. H C语言实验——买糖果
  9. java基于RXTXcomm.jar的串口通信
  10. 计算机网络中一些名词解释(一)