前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 一 | mmap 函数简介 )

【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 一 | mmap 函数简介 )

作者头像
韩曙亮
发布2023-03-29 20:30:48
4150
发布2023-03-29 20:30:48
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、mmap 简介


mmap 函数的作用是 将 文件 映射到 内存中 , 映射的单位必须是 PAGE_SIZE ;

mmap 函数引入头文件 :

代码语言:javascript
复制
<sys/mman.h>

mmap 函数原型 :

代码语言:javascript
复制
<sys/mman.h>
void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);
int munmap(void* start,size_t length);

mmap 函数参数 :

  • void* start : 如果为 0 就是让系统自动分配 , 如果不为 0 , 则由用户指定分配的地址 ;
  • size_t length : 申请分配内存的大小 ;
  • int prot : 内存保护标志 , 如 PROT_READ | PROT_WRITE | PROT_EXEC , 表示 可读 | 可写 | 可执行 ;
  • int flags : 映射对象类型标志位标志位 , 如 MAP_ANONYMOUS | MAP_PRIVATE , 表示 匿名 | 私有 ;
  • int fd : 文件描述符 ; 没有设置为 0 ;
  • off_t offset : 被映射对象的起点偏移量 , 一般设置 0 ;

二、mmap 函数作用


mmap 函数作用 : mmap 本质是内存映射 , 用途如下 ;

① 大文件读写 : 大文件读写 时 , 可以 将文件映射到内存中 ;

② 内存分配 : 一般在用户层使用 malloc 函数即可 , 不常用 ;

③ 修改内存 : 当以 匿名/私有 的方式 分配 可读/可写/可执行 的内存时 , 指定第一个 addr 地址参数 , 系统分配该地址处的内存 , 可以用于 修改当前内存的值

malloc 申请内存 : 使用 malloc 也可以申请内存 , malloc 底层也是调用的 mmap 系统调用方法申请的内存 ;

① 普通应用 : malloc 中在调用 mmap 系统调用之前 , 执行了大量的指令操作 ; 如果在普通应用中 , 这是没有问题的 ;

② 逆向工具应用 : 但是逆向的场景中 , 动态库是侵入目标进程的 , 第一个侵入的动态库 , 风险很大 , 会破坏目标进程内存结构 , 因此加载的指令尽量少 , 这里直接使用系统调用 , 简洁高效安全 ;

在注入进程的动态库中 , 指令越复杂 , 越容易出错 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、mmap 简介
  • 二、mmap 函数作用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档