首页
社区
课程
招聘
[原创]安卓驱动跳板 PTE 映射读写物理内存
发表于: 4天前 1811

[原创]安卓驱动跳板 PTE 映射读写物理内存

4天前
1811

安卓驱动跳板 PTE 物理映射读写

摘要


本文介绍一个基于 ARM64 页表项(PTE)直接操控的 Linux 内核模块,通过预先分配跳板页并动态修改其 PTE 映射,实现对任意用户态进程物理内存的透明读写。系统通过手动遍历五级页表(PGD→P4D→PUD→PMD→PTE)完成虚拟地址到物理地址的翻译,支持 1GB/2MB 大页识别与 4KB 标准页处理,并利用单页跳板 PTE 重映射技术绕过内核常规内存保护机制。配合软件 TLB 缓存优化,连续内存访问性能接近直接内存拷贝。整个过程对目标进程完全“透明”——不修改目标进程页表、不触发缺页异常。



一、技术背景与设计目标


1 传统内存访问的局限


在 Linux 内核中访问其他进程内存通常有以下方式:


| 方案 | 原理 | 缺陷 |

|------|------|------|

| `access_process_vm` | 内核标准接口 | 权限检查严格,受 `FOLL_FORCE` 限制 |

| `ioremap` | 建立新映射 | Device 属性导致非对齐崩溃,开销大 |


 2 设计目标


透明性:目标进程无任何感知,不修改其页表结构

高效性:避免频繁的页表分配与释放,仅修改单个 PTE

灵活性:支持任意物理内存访问,包括大页映射



二、技术架构



2核心原理



只分配一次,永久复用。后续所有物理内存访问都通过修改这一个 PTE 实现。


三、前置知识

在这我就不讲述基本的内核和系统原理了

1 五级页表遍历


ARM64 Linux 采用五级页表(实际使用取决于配置):


```

虚拟地址

    │

    ▼

[PGD] ──► [P4D] ──► [PUD] ──► [PMD] ──► [PTE] ──► 物理地址

 512      512       512       512       512

entries   entries   entries   entries   entries

```

2 基本的寄存器

当然在本帖只用到了存放pgd的寄存器

4 ttbr1_el1寄存器布局


TTBR1_EL1 (Translation Table Base Register 1)

64-bit 寄存器布局:


+-----------------------------------------------------+

| BADDR[47:1] | ASID[63:48] |

+-----------------------------------------------------+


具体位分配:

bits [63:48] - ASID (Address Space Identifier)

bits [47:1]  - BADDR (Base Address of translation table)

bit  [0]     - CnP (Common not Private)


5 arm64物理地址宽度

有俩个宽度分别是PA48和PA52


PA48(48位物理地址):


传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!

最后于 2天前 被gongchuang编辑 ,原因:
收藏
免费 84
打赏
分享
最新回复 (32)
雪    币: 6
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
感谢分享
4天前
0
雪    币: 6
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
感谢分享
4天前
0
雪    币: 271
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
明白了,自己分配一个pte,要读取内存时,将该页替换为自己的pte,读取完成后切换回去,这个思路绝了,完美解决了要读取的数据还处于缺页状态,规避了读取触发异常被检测的可能性。
4天前
1
雪    币: 102
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
看看
3天前
0
雪    币: 729
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
看看
3天前
0
雪    币: 1560
活跃值: (5668)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
7
666
3天前
0
雪    币: 102
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
666
3天前
0
雪    币: 112
活跃值: (9260)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
tql
3天前
0
雪    币: 5
活跃值: (4405)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
66666
3天前
0
雪    币: 161
活跃值: (1188)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
666
3天前
0
雪    币: 158
活跃值: (5516)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
看看 
2天前
0
雪    币: 667
活跃值: (6998)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
学习了
2天前
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
6
2天前
0
雪    币: 947
活跃值: (1021)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
6666666666666
2天前
0
雪    币: 95
活跃值: (3532)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
6666666666666
2天前
0
雪    币: 141
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
66666
2天前
0
雪    币: 266
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
1231
2天前
0
雪    币: 378
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
666
2天前
0
雪    币: 5288
活跃值: (6077)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
感谢分享。
1天前
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
666
1天前
0
雪    币: 45
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
感谢分享
1天前
0
雪    币: 5
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
23
6
1天前
0
雪    币: 47
活跃值: (2311)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
666
1天前
0
雪    币: 4661
活跃值: (7952)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
25
感谢分享
1天前
0
游客
登录 | 注册 方可回帖
返回