首页
社区
课程
招聘
[分享]UraniumVM-适用于Android/iOS/macOS的指令级函数虚拟机
发表于: 2021-4-19 10:12 11498

[分享]UraniumVM-适用于Android/iOS/macOS的指令级函数虚拟机

2021-4-19 10:12
11498

YunYoo Uranium vCPU framework for arm/arm64/x86/x64 on Android/iOS/macOS.

UraniumVM is developed by YunYoo(云铀子), all rights reserved.

2021/4/18:

2021/4/15:

Android iOS macOS
arm Yes No No
arm64 Yes Yes Yes
x86 Yes No No
x86_64 Yes No Yes
// run function 'fn' on UraniumVCPU with 'ctx'
// return value is r[0].sx/rax
long uvm_run_interp(const void *fn, const uvm_context_t *ctx);
// run function 'fn' on UraniumVCPU with 'ctx'
// return value is r[0].sx/rax
long uvm_run_interp(const void *fn, const uvm_context_t *ctx);
// this api is used to make target's function pointer under your control
//
// make a wrapper for function 'fn' with 'usrctx','callback'
// return value is a new function pointer which will run under our VCPU
// you can replace this pointer to target's function pointer
// like C++-Vtable/Script-Native-Bridge
// if return null, you should check errno
const void *uvm_make_callee(const void *fn, void *usrctx,
                            uvm_interp_callback_t callback);
// this api is used to make target's function pointer under your control
//
// make a wrapper for function 'fn' with 'usrctx','callback'
// return value is a new function pointer which will run under our VCPU
// you can replace this pointer to target's function pointer
// like C++-Vtable/Script-Native-Bridge
// if return null, you should check errno
const void *uvm_make_callee(const void *fn, void *usrctx,
                            uvm_interp_callback_t callback);
// opcode type for callback args
typedef enum uvm_optype_t {
  vcop_read,    // memory read
  vcop_write,   // memory write
  vcop_call,    // function call
  vcop_return,  // function return
#if __ARM__
  vcop_svc,  // arm syscall
#else
  vcop_syscall,  // intel syscall
#endif
  vcop_ifetch,  // interpreter fetch instruction
} uvm_optype_t;
// opcode type for callback args
typedef enum uvm_optype_t {
  vcop_read,    // memory read
  vcop_write,   // memory write
  vcop_call,    // function call
  vcop_return,  // function return
#if __ARM__
  vcop_svc,  // arm syscall
#else
  vcop_syscall,  // intel syscall
#endif
  vcop_ifetch,  // interpreter fetch instruction
} uvm_optype_t;
// callback args
typedef struct uvm_callback_args_t {
  // your own context passed for uvm_run_interp/uvm_make_callee
  const void *usrctx;
  // uvm execution context
  uvm_regs_t *uvmctx;
  // current opcode
  uvm_optype_t op;
  union {
    // for vcop_read/vcop_write/vcop_ifetch
    struct {
      const void *src;
      void *dst;
      int byte;
    } rw;
    // for vcop_call
    struct {
      const void *callee;
    } call;
    // for vcop_return
    struct {
      const void *hitaddr;  // which address hit return
    } ret;
    // for vcop_svc
    struct {
      // arm
      // parameters are in armctx->r[0...6]
      // syscall number from armctx->r[7]
      //
      // arm64
      // parameters are in arm64ctx->x
      // syscall number
      //
      // x86/x64
      // ...
      int sysno;
    } svc;
  } info;
} uvm_callback_args_t;
// callback args
typedef struct uvm_callback_args_t {
  // your own context passed for uvm_run_interp/uvm_make_callee
  const void *usrctx;
  // uvm execution context
  uvm_regs_t *uvmctx;
  // current opcode
  uvm_optype_t op;
  union {
    // for vcop_read/vcop_write/vcop_ifetch
    struct {
      const void *src;
      void *dst;

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 2
支持
分享
最新回复 (17)
雪    币: 198
活跃值: (548)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
支持 hook 吗 ,能打印出执行过的汇编代码吗?
2021-4-19 10:23
0
雪    币: 6634
活跃值: (4486)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
3

代码大小端、数据大小端、运行过程中改代码,

ARM、THUMB、数据混合存在,中断 这些支持吗?

最后于 2021-4-19 10:30 被yimingqpa编辑 ,原因:
2021-4-19 10:28
0
雪    币: 1662
活跃值: (3569)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
yimingqpa 代码大小端、数据大小端、运行过程中改代码,ARM、THUMB、数据混合存在,中断 这些支持吗?
Android/iOS/macOS只需要处理小端。支持运行过程中改代码:参见ifetch事件。ARM/THUMB混合支持。中断也支持,参见svc事件。
2021-4-19 11:06
0
雪    币: 1662
活跃值: (3569)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
slbwgslz 支持 hook 吗 ,能打印出执行过的汇编代码吗?
支持,参考A64Dbg的Trace、ADCpp脚本引擎。
2021-4-19 11:07
0
雪    币: 6634
活跃值: (4486)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
6
GeekNeo Android/iOS/macOS只需要处理小端。支持运行过程中改代码:参见ifetch事件。ARM/THUMB混合支持。中断也支持,参见svc事件。
ARM Thumb不止于手机,处理一下 代码和数据大小端 就棒了。
2021-4-19 11:19
0
雪    币: 2507
活跃值: (4651)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
支持开源
2021-4-19 12:59
0
雪    币: 277
活跃值: (3358)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
看了下,,不会用~~尴尬
2021-4-19 15:17
0
雪    币: 198
活跃值: (548)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
看不明白其中的关联关系,能在UraniumVCPU 的demo中单独体现吗
2021-4-19 18:39
0
雪    币: 216
活跃值: (636)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10

开源?

最后于 2021-4-19 19:43 被蒋豪编辑 ,原因:
2021-4-19 19:39
0
雪    币: 1662
活跃值: (3569)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
11
slbwgslz 看不明白其中的关联关系,能在UraniumVCPU 的demo中单独体现吗
UraniumVCPU是模拟一条指令执行的内核,UraniumVM是基于这个内核的完整虚拟机,头文件的接口和数据结构就是这个虚拟机的API。
2021-4-20 08:04
0
雪    币: 1662
活跃值: (3569)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
12
蒋豪 开源?
个人私用免费,不开源。为了消除误会,建议看看这篇说明:https://mp.weixin.qq.com/s/Eb0qIjLpf1_grgsqvDrjPg
2021-4-20 08:07
0
雪    币: 13
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
顶,支持作者的坚持
2021-4-20 09:51
0
雪    币: 173
活跃值: (3831)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
牛的,顶顶
2021-4-20 11:39
0
雪    币: 180
活跃值: (1323)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
15
相对开源的qemu有啥优势?
2021-4-20 15:22
0
雪    币: 2220
活跃值: (4597)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
持续关注 支持原创
2021-4-20 16:37
0
雪    币: 198
活跃值: (548)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
GeekNeo UraniumVCPU是模拟一条指令执行的内核,UraniumVM是基于这个内核的完整虚拟机,头文件的接口和数据结构就是这个虚拟机的API。
明白了 vcop_ifetch 就是 逐条指令执行的回调。这个时候可以进行各种操作。
2021-4-20 20:10
0
雪    币: 1662
活跃值: (3569)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
18
artake 相对开源的qemu有啥优势?
Qemu是硬件和系统虚拟化;
UraniumVCPU是指令虚拟化;
UraniumVM是函数虚拟化。
2021-4-23 13:40
0
游客
登录 | 注册 方可回帖
返回
//