首页
社区
课程
招聘
[原创] 《软件调试》分页机制windbg例子分析(各种填坑)
发表于: 2018-9-11 03:04 10180

[原创] 《软件调试》分页机制windbg例子分析(各种填坑)

2018-9-11 03:04
10180
1. PAE问题,按照文章内容一步一步来,一直测试一直错,开始怀疑人生。继续读文章n遍,发现书中例子为“非PAE模式”,参考文章1ebK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8X3I4A6P5r3W2S2L8X3N6E0K9h3&6Y4K9r3q4@1k6g2)9J5c8X3q4J5N6r3W2U0L8r3g2Q4x3V1k6V1k6i4c8S2K9h3I4K6i4K6u0r3y4e0b7^5x3K6j5I4z5o6S2Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0g2Q4b7U0m8Q4z5o6k6Q4c8e0N6Q4b7U0y4Q4b7V1u0Q4c8e0N6Q4b7V1u0Q4z5f1k6Q4c8e0k6Q4z5e0c8Q4b7U0W2Q4c8e0c8Q4b7U0S2Q4b7V1q4Q4c8e0W2Q4z5f1c8Q4z5f1g2b7b7f1g2Q4c8e0k6Q4b7e0S2Q4b7e0q4Q4c8e0g2Q4b7V1y4Q4z5p5k6Q4c8f1k6Q4b7V1y4Q4z5o6q4Q4c8f1k6Q4b7V1y4Q4z5o6q4Q4c8f1k6Q4b7V1y4Q4z5o6p5`.
2. 文中关于物理内存访问相关内容使用的是ldk模式(本地内核调试),由于真机使用的win10,设置起来麻烦,直接双机调试,虚拟机程序为VBOX,虚拟机用的 winxp-sp3。这里需要对windbg有一定的了解!!!
3. 到了最后一步,通过PTE+offset访问物理内存的时候,发现内容全部为0。查看了PTE的flag,发现Present(是否在物理内存)标记为0,即不在内存中。感觉是放到文件系统了。解决方法是,让程序执行一些命令,再看 PTE,发现指向内存变更了,查看相应的内存,找到目标。

以上为奋斗n天的一点认识,希望大家互相讨论,如有纰漏,请指出,谢谢。

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 1
支持
分享
最新回复 (11)
雪    币: 1604
活跃值: (640)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
2
ldk 调试方法有一定的局限性,比如无法实时追踪一些内核内存的状态,Win10 已经支持双物理机通过以太网线调试了,速度比那蛋疼的命名管道模拟串口的波特率快得多,是当前推荐的调试法
最后于 2018-9-11 21:08 被shayi编辑 ,原因:
2018-9-11 21:05
0
雪    币: 4129
活跃值: (879)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
shayi ldk 调试方法有一定的局限性,比如无法实时追踪一些内核内存的状态,Win10 已经支持双物理机通过以太网线调试了,速度比那蛋疼的命名管道模拟串口的波特率快得多,是 ...
受教了,一直都是r3层开发,驱动知道的很少,多多交流。
2018-9-12 10:03
0
雪    币: 1604
活跃值: (640)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
4
kinghzking 受教了,一直都是r3层开发,驱动知道的很少,多多交流。[em_28]
我 r3 层刚好比较生疏,多多交流
2018-9-12 11:06
0
雪    币: 364
活跃值: (10653)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
5
逻辑地址就是逻辑上的地址. 要转为线性地址  需要查询GDT表.  但是因为微软没有使用GDT表. 所以逻辑地址就可以看做是线性地址. 32位下. 高10位是PDE目录索引. 中间10位是 PTE表索引. 以前学的高版本不知道改没改.不过依照微软的蛋疼尿性. 改了整个系统得重写. 
2018-9-12 20:53
0
雪    币: 4129
活跃值: (879)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
6
张新琪 逻辑地址就是逻辑上的地址. 要转为线性地址 需要查询GDT表. 但是因为微软没有使用GDT表. 所以逻辑地址就可以看做是线性地址. 32位下. 高10位是PDE目录索引. 中间10位是 PTE表索 ...
windows有GDT表,只是32位的程序,值都一样。所以逻辑地址和线性地址的值“恰好”相等。不知道有没有特例。。。
2018-9-12 22:22
0
雪    币: 364
活跃值: (10653)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
7
kinghzking windows有GDT表,只是32位的程序,值都一样。所以逻辑地址和线性地址的值“恰好”相等。不知道有没有特例。。。
有GDT表.没使用. 64的没研究.
2018-9-12 23:10
0
雪    币: 36
活跃值: (122)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢楼主分享
2018-9-13 10:29
0
雪    币: 4
活跃值: (346)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
是的,PAE开启的情况下那个方法已经不适用了,之前一直没注意,不过现在我还是不怎么明白PAE的原理..
2018-9-13 17:17
0
雪    币: 1604
活跃值: (640)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
10
ZwTrojan 是的,PAE开启的情况下那个方法已经不适用了,之前一直没注意,不过现在我还是不怎么明白PAE的原理..
PAE 启用时,在内核空间中多了一个最顶层的数据结构 “索引”,一般叫做 “PDPT”(页目录指针表),PAE 下的虚拟->物理地址转换,可以参考这篇:https://bbs.pediy.com/thread-218170.htm
实践中用得最多的还是虚拟和物理地址,逻辑与线性地址在概念上的意义大于实战的
最后于 2018-9-13 22:42 被shayi编辑 ,原因:
2018-9-13 22:39
0
雪    币: 4129
活跃值: (879)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
11
shayi ZwTrojan 是的,PAE开启的情况下那个方法已经不适用了,之前一直没注意,不过现在我还是不怎么明白PAE的原理.. PAE 启用 ...
遇到高人了,看到PAE的时候,也有这个疑惑,谢谢大神。
2018-9-14 11:05
0
雪    币: 60
活跃值: (367)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
2018-9-18 10:40
1
游客
登录 | 注册 方可回帖
返回