两个内存段

在同一个进程空间中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 禁用dlsym_Android7.0对dlopen的改变——读取私有.so结果变化相关推荐

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

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

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

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

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

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

  4. android 禁用dlsym_Android10 aarch64 dlopen Hook

    前言[toc] 对于自动化hook Il2cpp 的模块来说, dlopen 的hook相当于一个大门, 没有该大门口, 一切都是纸上谈兵 在 armabi-v7a 上hook dlopen, 轻松的 ...

  5. android studio 3.0新功能介绍

    谷歌2017发布会更新了挺多内容的,而且也发布了AndroidStudio3.0预览版,一些功能先睹为快.(英语一般,有些翻译不太好) 下载地址 https://developer.android.g ...

  6. ym——物联网入口之中的一个Android蓝牙4.0

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 假设还有同学不知道蓝牙4.0能够做什么请查看Android+蓝牙 4.0 将带来什么? ...

  7. ym——物联网入口之一Android蓝牙4.0

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 如果还有同学不知道蓝牙4.0可以做什么请查看Android+蓝牙 4.0 将带来什么? ...

  8. Android 从6.0,7.0,8.0,9.0,10.0的特性整理和适配方案(不好含全部新特性,总结了一些可能应用中会遇到的)

    总所周知从Android6.0之后的每一次系统迭代,系统特性都有比较大的改变.平时做开发的时候都是有在注意这些方面的适配,但是一直没有时间去整个一下,今天正好来总结一下吧.如果觉的太长,可以等下一篇文 ...

  9. Google发布Android Studio 1.0

     第一个IDE稳定版本:Google发布Android Studio 1.0 摘要:Google于今天发布了Android Studio 1.0,其新增的突出特性包括:首次安装向导方面.示例导入和 ...

最新文章

  1. 联想拯救者Y9000-ubuntu-U盘启动失败解决方法
  2. 如何重启Cloudera Manager?
  3. 计算机音乐作曲排名2019,2019金曲排行榜_2019《全球华人歌曲排行榜》年度五强名单公布...
  4. wxpy 实现微信机器人
  5. Linux下find用法总结
  6. ruby打印_Ruby程序打印一个数字的乘法表
  7. 用popen函数操作其它程序的输入和输出
  8. ie8无法打开oracle em,IE8无法进入debug模式而引发的Oracle数据库问题-Oracle
  9. 设备零线地线短路维修
  10. php-win.exe 是什么,windows桌面指的是什么
  11. The authentication type 10 is not supported
  12. #码神心得_03# 浮点类型、char类型
  13. 近义句子转换软件 - 同义词转换器软件
  14. python barrier_Python中的Barrier对象
  15. windows平台视频渲染技术小结
  16. 2021最新大厂Java面试集合,顺利拿到offer
  17. 一、saturn快速启动
  18. vb.net读取写入EXCEl的终极方法-NOPI
  19. 数字化工厂车间条形码应用视频
  20. 双子星tv源码_云水日记-双子星IPTV管理系统搭建教程

热门文章

  1. Python数据库的连接
  2. 木马开机启动的六种方法
  3. QEMU 网络虚拟化
  4. linux中sz和rz的使用,在服务器和本地之间传输数据
  5. HashedWheelTimer时间轮原理分析
  6. kubernetes(一)kubeadm搭建k8s集群
  7. [Kafka与Spark集成系列三] Spark编程模型
  8. pprof 的原理与实现
  9. LiveVideoStack线上分享第四季(三):在线教育的音视频架构设计及弱网对抗技术...
  10. ECUG 早鸟票热卖中 | 大咖聚首 探索云计算下一个十年