文章目录

  • 一、系统调用
  • 二、Android NDK 中的系统调用示例

一、系统调用


在 " 用户层 " , 运行的都是用户应用程序 ;

用户层 下面 是 驱动层 , 驱动层 下面是 系统层 , 最底层是 BIOS ; 系统层 包含 系统内核 ;

层级从上到下 : 用户层 | 驱动层 | 系统层 | BIOS ;

上述 444 层之间 , 不可以直接跨越 , 应用想要读取 驱动 / 内核 的数据是不被允许的 , 强行访问会导致崩溃 ;

应用的功能 需要借助 驱动实现 , 如文件读写 , 肯定要借助 硬盘驱动 实现 文件 在硬盘上的读写操作 ;

使用 " 软中断 " 实现跨层访问 , 软中断是由软件发起的 , 不是由错误导致 ;

调用 read 方法 , 读取文件 , 触发了软中断 , 以 arm 为例 , 执行 SVC 指令 , 参数 0 , 在 R0 中可以设置另外的参数 , 该 R0 参数指定调用什么功能 ;

整个应用进程的控制权此时就交给了 驱动层 / 系统层 , 在这些底层具体执行了哪些操作 , 应用层是不知道的 ;

arm 架构的 CPU 中软中断指令是 SVC ;

x86 架构的 CPU 中软中断指令是 int ;

与 软中断 相对应的是 硬中断 ; 硬中断 是由 硬件产生 ;

二、Android NDK 中的系统调用示例


系统调用相关的头文件定义在 D:\Microsoft\AndroidNDK64\android-ndk-r16b\sysroot\usr\include\asm-generic\unistd.h 文件中 ; 在该文件中定义了所有的系统调用 ;

#include <asm/bitsperlong.h>
#ifndef __SYSCALL
#define __SYSCALL(x,y)
#endif
#if __BITS_PER_LONG == 32 || defined(__SYSCALL_COMPAT)
#define __SC_3264(_nr,_32,_64) __SYSCALL(_nr, _32)
#else
#define __SC_3264(_nr,_32,_64) __SYSCALL(_nr, _64)
#endif
#ifdef __SYSCALL_COMPAT
#define __SC_COMP(_nr,_sys,_comp) __SYSCALL(_nr, _comp)
#define __SC_COMP_3264(_nr,_32,_64,_comp) __SYSCALL(_nr, _comp)
#else
#define __SC_COMP(_nr,_sys,_comp) __SYSCALL(_nr, _sys)
#define __SC_COMP_3264(_nr,_32,_64,_comp) __SC_3264(_nr, _32, _64)
#endif
#define __NR_io_setup 0
#define __NR_io_destroy 1
#define __NR_io_submit 2
#define __NR_io_cancel 3
#define __NR_io_getevents 4
#define __NR_setxattr 5
#define __NR_lsetxattr 6
#define __NR_fsetxattr 7
#define __NR_getxattr 8
#define __NR_lgetxattr 9
#define __NR_fgetxattr 10
#define __NR_listxattr 11
#define __NR_llistxattr 12
#define __NR_flistxattr 13
#define __NR_removexattr 14
#define __NR_lremovexattr 15
#define __NR_fremovexattr 16
#define __NR_getcwd 17
#define __NR_lookup_dcookie 18
#define __NR_eventfd2 19
#define __NR_epoll_create1 20

#define __NR_getuid 174 系统调用为例 , 174 对应的 16 进制数为 0xAE ;

进行软中断时 , 执行如下汇编执指令时 ,

MOV R0, 0xAE
SVC 0

会自动执行 #define __NR_getuid 174 对应的系统调用 ;

【Android 逆向】Android 进程注入工具开发 ( 系统调用 | Android NDK 中的系统调用示例 )相关推荐

  1. 【Android 逆向】Android 进程注入工具开发 ( 总结 | 源码编译 | 逆向环境搭建使用 | 使用进程注入工具进行逆向操作 ) ★★★

    文章目录 一.Android 进程注入工具开发系列博客 二.Android 进程注入工具 源码下载编译 三.逆向环境搭建 四.使用注入工具进行逆向操作 1.获取远程进程号 2.注入工具准备 3.注入动 ...

  2. 【Android 逆向】Android 进程注入工具开发 ( 远程调用 | x86 架构的返回值获取 | arm 架构远程调用 )

    文章目录 前言 一.x86 架构的返回值获取 二.ARM 架构远程调用 前言 在之前的博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 ...

  3. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具收尾操作 | 关闭注入的动态库 | 恢复寄存器 | 脱离远程调试附着 )

    文章目录 一.dlclose 函数简介 二.关闭注入的 libbridge.so 动态库 三.恢复寄存器 四.脱离远程调试附着 一.dlclose 函数简介 dlclose 函数的作用是 卸载一个 指 ...

  4. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取注入的 libbridge.so 动态库中的 load 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一.dlsym 函数简介 二.获取 目标进程 linker 中的 dlsym 函数地址 三.远程调用 目标进程 linker 中的 dlsym 函数 获取 注入的 libbridge.so ...

  5. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 linker 中的 dlopen 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一.dlopen 函数简介 二.获取 目标进程 linker 中的 dlopen 函数地址 三.远程调用 目标进程 linker 中的 dlopen 函数 一.dlopen 函数简介 dlo ...

  6. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )

    文章目录 前言 一.等待远程进程 mmap 函数执行完毕 二.从寄存器中获取进程返回值 三.博客资源 前言 前置博客 : [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | ...

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

    文章目录 一.准备 mmap 函数的参数 二.mmap 函数远程调用 一.准备 mmap 函数的参数 上一篇博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 远程调 ...

  8. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 调试进程 ATTACH 附着目标进程 | 读取目标函数寄存器值并存档 )

    文章目录 一.调试进程 ATTACH 附着目标进程 二.读取目标函数寄存器值并存档 1.主要操作流程 2.ptrace 函数 PTRACE_GETREGS 读取寄存器值 一.调试进程 ATTACH 附 ...

  9. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具的 main 函数分析 )

    文章目录 一.注入流程 二.注入工具的 main 函数分析 一.注入流程 开始分析 [Android 逆向]Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 ...

  10. 【Android 逆向】Android 进程注入工具开发 ( SO 进程注入环境及 root 权限获取 | 进程注入时序分析 )

    文章目录 一.SO 进程注入环境及 root 权限获取 二.进程注入时序分析 一.SO 进程注入环境及 root 权限获取 SO 注入的前提必须有 root 权限 , 有了 root 权限后 , 才能 ...

最新文章

  1. 一个较为详细的ETL系统实现方案
  2. 《强化学习周刊》第29期:Atari 深度强化学习的研究综述、金融强化学习的最新进展...
  3. LeetCode374 猜数字大小 (二分法)
  4. 简述python垃圾回收机制_python中的垃圾回收机制简述
  5. thinkphp3.1迁移php7,ThinkPHP3.1迁移到PHP7的注意事项
  6. bzoj 1999: [Noip2007]Core树网的核【树的直径+单调队列】
  7. Solr的学习使用之(三)IKAnalyzer中文分词器的配置
  8. 第四章信息系统安全基础考试要点及真题分布
  9. 界面设计与测试的规范
  10. Futter基础第5篇: 实现列表、动态列表【ListView、ListView.builder】
  11. 命令行批量修改IP并ping测试
  12. 排列组合公式,用向量叉乘的办法计算平行四边形面积
  13. 云脉自定义模板识别大大提高资料数据格式化的效率
  14. Spring——Spring两大特性:IOC+AOP
  15. linux下文件复制、重命名
  16. html百度地图api 截图,百度地图(截图)
  17. HTML+CSS实现下拉菜单导航栏
  18. 洪兴社的Oracle情节之安全管理篇(一)
  19. 使用fastdfs搭建文件管理微服务
  20. 粒子群优化极限学习机PSOELM做数据预测 PSO-ELM优化算法预测模型

热门文章

  1. (实用)将wordpad添加到Windows PowerShell中
  2. 深入解析Javascript中this关键字的使用
  3. 中国@代码生成技术@国产
  4. 解决vuex页面刷新导致数据丢失问题
  5. 数据流和十六进制转换
  6. dubbo中使用动态代理
  7. C3P0连接池的运用
  8. ubuntu lamp配置多域名服务器
  9. BZOJ 3685: 普通van Emde Boas树( 线段树 )
  10. 西电oj1066 费马小定理