littlebot
Published on 2025-03-30 / 0 Visits
0

【源码】基于标准C语言的页表编辑库

项目简介

PTEditor是一个轻量级库,可在用户空间对x86_64(Linux和Windows 10)以及ARMv8(Linux)系统中所有进程的各级页表进行修改。同时支持读取和设置x86的PATs、ARM的MAIRs等内存类型。该库仅依赖标准C功能,不依赖其他库。

项目的主要特性和功能

  1. 页表操作:可解析、更新页表条目,设置和清除页表项的位,读取和设置页帧号(PFN)。
  2. 系统信息获取:能获取系统默认页面大小。
  3. 物理页操作:可读写物理页内容,在Linux系统下还能将物理地址范围映射到虚拟地址空间。
  4. 分页结构管理:可获取和设置分页结构的根地址。
  5. TLB和屏障操作:可使指定地址的TLB无效化,执行全序列化屏障操作。
  6. 内存类型管理:支持读取和设置所有内存类型的值,操作特定内存类型属性,查找符合特定值的内存类型。
  7. 打印功能:提供漂亮打印页表条目的功能。

安装使用步骤

安装

Linux

  • 从PPA安装(推荐)
    1. 添加PPA公钥和URL到包管理器并更新: bash sudo apt update
    2. 安装内核模块: bash sudo apt install pteditor-dkms
  • 从源码安装内核部分
    1. 安装内核头文件: bash sudo apt install linux-headers-$(uname -r)
    2. 编译库和内核模块: bash make
    3. 加载内核模块: bash sudo insmod module/pteditor.ko

Windows

  • 使用预构建驱动(推荐)
    1. 临时禁用驱动签名强制:在开始菜单中按住Shift键点击“重启”,在重启菜单中选择“疑难解答 > 高级选项 > 启动设置”,按“7”或“F7”禁用驱动签名强制。
    2. 永久禁用驱动签名强制:在管理员命令提示符中输入bcdedit /set testsigning on,禁用测试模式则输入bcdedit /set testsigning off
    3. 加载驱动:在driver/PTEditorLoader目录下以管理员身份运行PTEditorLoader.exe,卸载驱动则运行PTEditorLoader.exe --unload
  • 从源码构建内核驱动:需安装Visual Studio(含Visual C++)、Windows SDK和Windows Driver Kit(WDK),然后使用Visual Studio项目进行构建。

使用

  1. 初始化和清理:使用ptedit_init()初始化PTEditor内核模块,使用ptedit_cleanup()释放内核模块。
  2. 选择实现方式:使用ptedit_use_implementation()选择PTEditor的实现方式。
  3. 运行示例:参考example.cdemo文件夹中的示例,例如memmap可遍历并转储页表内容,virt2phys可将虚拟地址转换为物理地址。
  4. 测试:在test文件夹中使用make(Linux)或Visual Studio(Windows)编译并运行单元测试,以验证内核部分和库的功能。

下载地址

点击下载 【提取码: 4003】