获取页表项和页目录项VA的汇编代码的解析(整理)
来源:互联网 发布:怎么看八字 知乎 编辑:程序博客网 时间:2024/06/09 12:01
MOV EAX, ESI
AND EAX, 0xFFFFF3FF
SHR EAX, 0A
SUB EAX, 40000000
MOV EAX, ESI
AND EAX, FFCFFFFF
SHR EAX, 14
SUB EAX,3FD00000
首先看下PTE的计算公式:
PTE_Addr = (VirtualAddr >> 12) * 4 + 0xC0000000
上面的推导过程如下:
PTE_Addr=((VA&0xffc00000)>>22)*4096+((VA&0x3ff000)>>12)*4+0xc0000000
=(((VA&0xffc00000)>>22)<<12)+(((VA&0x3ff000)>>12)<<2)+0xc0000000
=((VA&0xffc00000)>>10)+((VA&0x3ff000)>>10)+0xc0000000
=((VA&0xffc00000)+(VA&0x3ff000)>>10)+0xc0000000
=((VA&(0xffc00000|0x3ff000))>>10)+0xc0000000
=((VA&0xfffff000)>>10)+0xc0000000
=(((VA&0xfffff000)>>12)<<2)+0xc0000000
=((VA&0xfffff000)>>12)*4+0xc0000000
下面分析下上面汇编的优化代码:
MOV EAX, ESI
AND EAX, 0xFFFFF3FF ;下面是右移10位,原来右移12位。保持一致其中的最后两位需清0
SHR EAX, 0A ;右移12位再左移2位,结果就是右移10位。
SUB EAX, 40000000 ;对EAX而言(不考虑标志位),减去0x40000000和加上0xC0000000是一样的,之后
;EAX便是ESI对应的VA的页表的虚拟地址。
MOV EAX, ESI
AND EAX, FFCFFFFF;和上面的道理一样
SHR EAX, 14 ;右移12+10位再左移2位,结果就是右移20位。
SUB EAX,3FD00000 ;对EAX而言,减去0x3FD00000和加上0xC0300000是一样的
- 获取页表项和页目录项VA的汇编代码的解析(整理)
- 【整理】几个汇编语句代码的解析
- 给VA添加代码片段的快捷方式
- 整理获取天气信息的各种API和JSON解析
- 批处理bat命令 获取当前盘符和当前目录和上级目录的代码
- IOS中获取各个文件的目录路径的方法和NSFileManager类(整理)
- VA 快捷键(很好的文章)
- va函数的使用
- VA 函数的用法
- 神奇的VA医院
- va的探究
- Java代码中获取操作系统的用户目录和当前工作目录
- 整理的汇编工具、汇编网站和汇编教学平台总结
- 整理关于汇编的东西(一)
- 整理关于汇编的东西(二)
- 整理关于汇编的东西(三)
- 整理关于汇编的东西(四)
- 关于获取当前代码的目录
- AVI破解及Android2.3实现
- tomcat保存中文异常
- 忘记密码
- Marvell 88w8686 SDIO wifi
- SQLite的SQL语法
- 获取页表项和页目录项VA的汇编代码的解析(整理)
- linux 命令
- Java字节代码的操纵
- 2011年沈大海讲师Android的腾讯微博客户端源代码,实现oauth_verifier自动提取!
- 关于java代码调用页面中javascript代码
- 《漩涡中的中国首富李彦宏》
- window下tomcat集群和负载均衡(转)
- PHP使用DOM LoadHTML()解析的中文乱码问题
- 单向关系中的JoinColumn