4MB to 1024 x 4KB...

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
By: c0de90e7

 

Have you used pagetable tricks ( INT 0Eh hooking + P bit clearing in PTEs ) for execution breakpoints in code pages ?

This is something I wrote some time ago when playing around with pagetable tricks. Now I have added some comments and ascii art schematics, but it is far from being good enough for general use out of PoC field...



Well, back then, I was experimenting all kind of page tricks and one thing I thought of was using page tricks for executable code breakpoints ( i.e., not data access ones but code execution access ones, why ? because I wanted to do hooks without touching the code itself -similar to DRx...- ).

So I implemented the thing and everything was fine... until I tried the experiments in a machine with far more ram... ntoskrnl.exe module was mapped into a 4MB page so problems were evident:

- If I wanted to put a breakpoint in, say, ntosknrl.exe!NtOpenFile and ntoskrnl.exe was mapped in a 4MB page, I would need to mark the whole 4MB page as nonpresent, making the OS almost unable to run with that many pagefaults.

- INT 0Eh handler itself was into that 4MB page, so even if I hooked INT 0Eh by IDT entry manipulation, many problems would arise...

- Other later and more subtle problems which I don't fully remember, but not important, since first problem already made the thing unviable...

So I thought, ok, I could disable 4MB page use in boot time ( by registry keys and in other ways ) and it would be ok. But that wouldn't do in direct load scenarios, I need to split those 4MB pages on the fly.

That's what led me to write the routine:

http://www.rootkit.com/vault/c0de90e7/SPLIT4M-4K.INC

The theory behind it is pretty simple, as the tittle says, just change the 4MB PDE into a 1024x4KB PDE and create a PT with 1024 PTEs that map the same physical address space by aliasing those 4MBs.

It was written in NASM ( I use NASM whenever I experiment with stuff or have an idea... ). I might write a driver in C and implement this and PAE supporting routines also, I don't know.

P.S.: Just in case you someone wonders... when I try ideas and so on that need ring0, I use a small loader that goes ring0 by /Device/PhysicalMemory edition. It's just a quick&easy template for NASM experiments
【题解】[ IOI 2001] Mobile Phones(二维树状数组) 题面 【题目描述】 假设TampereTampereTampere区域的第四代手机基地站运行如下。该区域被划分为一些正方形(方阵)。这些正方形构成一个SSS╳SSS的矩阵,矩阵行和列的编号从000到S−1S-1S−1。每个正方形包含一个基地站。由于一个手机可能从一个正方形移动到另一个正方形,或者手机可能开机或关机,所以,在一个正方形内正在使用的手机数目是随时变化的。有时,每个基地站需要将正在使用的... 阅读详情

相关推荐

Xilinx_RAM_IP核的使用

Xilinx_RAM_IP核的使用 说明:单口RAM、伪双口RAM、双口RAM的读写,以及RAM资源占用的分析。

Crazzy_M的博客 6210

1024 - 在这里起航!

本文关键字:1024、程序员节、1024程序员节、程序员节是哪天? 听风随笔:记录博主的所见、所思、所感。 萌新科普:讲述如何在没有基础的情况下快速实现自己的所需。 学习路上:献给在学习路上的你。 填坑攻略:献给已经工作的你。 借书下饭:记录博主的吃书、paper下咽历程。 磨炼升华:献给学有所成但依然孜孜不倦的你。

微光点亮星辰 1万+

2048基站

2048基站

1024

哇呜,今天发博客送勋章哎!!!

qq_38234015的博客 4万+

【嵌入式基础】为什么0x100是256个字节、0x400是1KB、0x800是2KB、0x1000是4KB

在刚开始学习嵌入式时我们就遇到各种进制之间的换算,十六进制、十进制、八进制、二进制等等,一开始会经常在各种进制之间迷失自我;在深入学习或者做项目或者工作时我们也经常要查看各种芯片的数据手册(datasheet),手册里面一般都是使用十六进制表示各种地址,这时我们就会遇到类似这样的问题:为什么 0x100 是 256Bytes(字节) 大小?0x400 是 1KB 大小? 0x800是 4KB 大小?下面我们就来解决这个疑惑吧。 数据

挨踢民工的博客 1万+

b、B、KBMB、GB 的关系?

參考:https://blog.csdn.net/niguang09/article/details/6673465 bit就是位,也叫比特位,是计算机表示数据最小的单位 byte就是字节 3.1byte=8bit 4.1byte就是1B 5.一个字符=2字节 6.1KB=1024B 字节就是Byte,也是B 位就是bit也是b 转换关系如下: 1KB=1024B 1B= 8b 存储容量:是该存储...

qq_22820783的博客 4029

b和kb的换算_KBMB怎么换算?

展开全部1 KB=0.0009766 MB;1 MB=1024 KBKB:千字节,是一种资讯计量单位,现今通62616964757a686964616fe4b893e5b19e31333366306438常在标示内存等具有一般容量的储存媒介之储存容量时使用。此计量单位容易与KiB混淆,按照IEC命名标准,二进制的标准命名是KiB, MiB等,Linux和macOS X已经采用十进制的标准命名。但...

weixin_30741527的博客 1万+

为什么0x100是256个字节、0x400是1KB、0x800是2KB、0x1000是4KB

文章目录前言数据单位标准两种标准0x400为什么是1KB大小?回到开始的问题附录1:存储单位之间的换算附录2:常见的16进制地址及其对应容量 前言 在刚开始学习嵌入式时我们就遇到各种进制之间的换算,十六进制、十进制、八进制、二进制等等,一开始会经常在各种进制之间迷失自我; 在深入学习或者做项目或者工作时我们也经常要查看各种芯片的数据手册(datasheet),手册里面一般都是使用十六进制表示各种地址。 这时我们就会遇到类似这样的问题: 为什么 0x100 是 256Bytes(字节) 大小? 0x400

韦东山嵌入式专栏 1万+

区分与换算GiB,MiB,KiB;GB,MB,KB;Gib,Mib,Kib;Gb,Mb,Kb;GB/s,MB/s,KB/s,B/s;Gb/s,Mb/s,Kb/s,b/s

1.GiB、MiB、KiB 与 GB、MBKB(Gib、Mib、Kib 与 Gb、MbKb区别同下) (1)区别 区别很简单,前者二进制,后者十进制。二进制中G,M,K之间进位为1024;十进制中G,M,K之间进位为1000。 1999年国际电工协会(IEC)拟定了"KiB"、"MiB"、"GiB"的二进制单位,专用来标示"1024进位"的数据。而"KB"、"MB"、"

Norma_yu的博客 2万+

1byte、1KB4KB,1MB、1GB用16进制表示的范围。任意地址范围求字节数

请先打开一个在线的2进制转16进制的转换器,便于理解调试。首先 1个字节=1byte=8Bit。字节是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。1KB = 1024byte = 2的10次方 byte,转化为16进制为0x400。同时换一种说法,1KB可以表示1024个地址,0x400个地址,而且表示地址的范围是0x00~0x3FF。(记住)2K...

望那伊人的博客 4万+

MB,GB,KB,bytes单位换算 及 fdisk -l 参数详解

MB,GB,KB,bytes单位换算 GB和G的区别: 没有区别,一个是全称,一个是简称。 G是GB的简称 GB是GBytes的简称 K和KB,G和GB等同理。 电脑里,所有的文件及磁盘空间的大小都是用KBMB,GB这些来表达的,然而叫起来不方便,所以都把后面的一个B省略了,所有人都会说是多少多少K,多少多少M,多少多少G,其实都是一样的。 严格的说,GB是个单位,G不是单位。现在大...

wudinaniya的博客 1万+

关于1byte 1KB 1MB 1GB求其所能表示的地址范围

1字节=1byte=8bit 一字节是8位 字节是是计算机信息技术用于计量存储容量的一种计量单位。 编码于字节: ASCII:一个英文字母占一个字节的空间。 UTF-8:一个英文字符等于一个字节,一个中文等于三个字节。 Unicode编码:一个英文等于俩个字节,一个中文等于俩个字节。 1KB = 1024byte = 2^10byte,转化位16进制位0x400 1KB能表示1...

GoingJack博客 5947

用Java实现,把Byte,相应的转换为KB,MB,GB,TB

  算法:先从文件中一行一行的读,把需要的转换的字节截取出来,然后用BigInteger类实现转换,为了方便计算,我们用10三次方,替代1024计算。   package com.Capacity; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; imp...

kang315 3933

学习杂记十五:页面大小4KB,为什么是B不是b

答案来源:https://zhidao.baidu.com/question/260315603.html 操作系统页面大小4KB 计算机操作系统中分页存储管理方式这样讲: 其中0~11位为页内地址,即每页的大小为4KB; 但是B表示的不是字节吗,不是应该用b吗?4Kb。 在后面又讲每个页面项占一个字节,一共一兆个,要占用1MB,显然这个B就是字节,是不是前边的4KB的B用错了呀,请高手指点,...

F班袁湘琴 1万+

将文件大小转换为KBMB

function bytesToSize(bytes) { if (bytes === 0)  return '0 B'; var k = 1000, // or 1024 sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], i = Math.floor(Math.log(bytes) / Math.log(k))

lijunjie818的博客 3860

解决Windows10更新KB5034441失败,错误代码 0x80070643的案例

Windows10更新KB5034441失败,错误代码 0x80070643

qq_39723296的博客 2万+

C语言实现把字节数转化成kb,存储单位的换算(KB, MB, GB)

public static string HumanReadableFilesize(double size) { string[] units = new string[] { "B", "KB", "MB", "GB", "TB", "PB" }; double mod = 1024.0; int i = 0; while (size >= mod) { size /= mod…8 bi...

weixin_39841002的博客 3279

C# 文件大小字节byte换算为 Kb Mb Gb Tb

C# 文件大小字节byte换算为 Kb Mb Gb Tb1、使用到的函数      Math.Pow(x,y) //返回 x 的 y 次幂的值      NumberObject.ToString("f2") //可把 Number 四舍五入为指定小数位数的字符串2、计算文件大小,保留两位小数     /// <summary>          /// 计算文件大小函数(保留两位小数...

仙魁XAN 9957
上一篇: Keyboard Interrupt Hook using I/O APIC
下一篇: NSI Module Hook : Hiding Port Under Windows Vista
iiprogram
博客等级 码龄25年 1066粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值