读《格蠹汇编》第一章并实验

最近发现张银奎老师调试的书不错,新的格蠹汇编也买过来看,很快到货了。今天晚上读第一章,呵呵,还能做实验,不错。

这是一个从堆数据里面抢救丢失的博客的例子,实验也很有趣,在 dmp文件中搜索到博客内容,并写到文本文件。过程中符号表加载出错,最终看windbg的help顺利排除问题,完成实验,这里记录一下:


准备环境:
c盘下面建立gedu
下载
http://www.advdbg.org/books/bugwars/
解压
安装windbg


启动Windbg
操作菜单File>Open Crash Dump...,打开转储文件labs\blog\ieblog.dmp
提示:
Loading Dump File [C:\gedu\labs\blog\ieblog.dmp]
User Mini Dump File with Full Memory: Only application data is available
Symbol search path is: *** Invalid ***
说明符号表目录不对,需要设置:
Process Uptime: 48933 days 10:49:51.000
................................................................
.................
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll - 
查帮助,ntdll.dll可以通过互联网下载。需要设置互联网的目录:
srv*DownstreamStore*http://msdl.microsoft.com/download/symbols
创建一个c:\symbols目录,然后在windbg中File>Symbol Search Path中输入:
srv*c:\symbols*http://msdl.microsoft.com/download/symbols;C:\symbols
选中下面的reload
0:011> .reload
................................................................
.................
不再报错,然后查看一下符号表目录
0:011> .sympath
Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols;C:\symbols
Expanded Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols;c:\symbols


0:011> s -u 10000 L8000000 "当年在"
001b5942  5f53 5e74 5728 4ea4 5927 4e8c 90e8 8bfb  S_t^(W.N'Y.N....
001bbf02  5f53 5e74 5728 4ea4 5927 4e8c 90e8 8bfb  S_t^(W.N'Y.N....
001e6fb2  5f53 5e74 5728 4ea4 5927 4e8c 90e8 8bfb  S_t^(W.N'Y.N....
0021f5ca  5f53 5e74 5728 4ea4 5927 4e8c 90e8 8bfb  S_t^(W.N'Y.N....
00228fda  5f53 5e74 5728 4ea4 5927 4e8c 90e8 8bfb  S_t^(W.N'Y.N....
00249bea  5f53 5e74 5728 4ea4 5927 4e8c 90e8 8bfb  S_t^(W.N'Y.N....
021c2012  5f53 5e74 5728 4ea4 5927 4e8c 90e8 8bfb  S_t^(W.N'Y.N....
021c5012  5f53 5e74 5728 4ea4 5927 4e8c 90e8 8bfb  S_t^(W.N'Y.N....
021c647a  5f53 5e74 5728 4ea4 5927 4e8c 90e8 8bfb  S_t^(W.N'Y.N....
0220512a  5f53 5e74 5728 4ea4 5927 4e8c 90e8 8bfb  S_t^(W.N'Y.N....
022ad29a  5f53 5e74 5728 4ea4 5927 4e8c 90e8 8bfb  S_t^(W.N'Y.N....
02bfab9c  5f53 5e74 5728 4ea4 5927 4e8c 90e8 8bfb  S_t^(W.N'Y.N....
02bfc1c2  5f53 5e74 5728 4ea4 5927 4e8c 90e8 8bfb  S_t^(W.N'Y.N....
列出和很多地址。
s是内存搜索命令:
s (Search Memory)
The s command searches through memory to find a specific byte pattern.
s [-[[Flags]]Type] Range Pattern 
u指的是Unicode string,因为汉字的编码是unicode


0:011> dU 001b5942 L1000
001b5942  "当年在交大二部读书的时候,每个学期总会去几次闵行老街,有时是买东"
001b5982  "西,有时是去闲逛。当时校园附件很是空旷,去一次市区不容易,所以去"
001b59c2  "闵行老街是当时的一种快乐。</P>..<P>闵行老街临近黄浦江畔"
001b5a02  "的西渡渡口,对岸是奉贤。老街的中央部分是个长方形的广场,被划分成"
001b5a42  "一行行的商铺,卖百姓生活所需的各种日用品,从蔬菜粮油到服装百货。"
001b5a82  "商铺的周围包围着各种各样的店铺,有理发、修脚、修理电器等各种不同"
001b5ac2  "形式大大小小的店。靠里侧一个比较大的店,是买旧货的,里面有各种各"
001b5b02  "样的旧货买,小的有手表、像章之类,大的有电视机、冰箱和自行车等等"
001b5b42  ",店里有很多柜台,里面陈列着商品,柜台后有服务员,当有人要买东西"
001b5b82  "时,服务员会开个单子,然后将单子通过头顶的一根铁丝传递到“收款处"
001b5bc2  "”,收款处收好钱后,再通过这根铁丝把单子传递回来;这种简单的方式"
001b5c02  "各部门合作的非常默契,不用奔来奔去,也不用在店里大喊大叫,而且这"
......
查看地址的内容
d命令由于现实内存信息
The d* commands display the contents of memory in the given range.
du Unicode characters. 现实unicode汉字,正合适。


保存文件前面增加unicode文件标识,这需要一定技巧。
用db观察博客前面的内容:
0:011> db 001b5942-8
001b593a  00 00 3c 00 50 00 3e 00-53 5f 74 5e 28 57 a4 4e  ..<.P.>.S_t^(W.N
001b594a  27 59 8c 4e e8 90 fb 8b-66 4e 84 76 f6 65 19 50  'Y.N....fN.v.e.P
001b595a  0c ff cf 6b 2a 4e 66 5b-1f 67 3b 60 1a 4f bb 53  ...k*Nf[.g;`.O.S
001b596a  e0 51 21 6b f5 95 4c 88-01 80 57 88 0c ff 09 67  .Q!k..L...W....g
001b597a  f6 65 2f 66 70 4e 1c 4e-7f 89 0c ff 09 67 f6 65  .e/fpN.N.....g.e
0x53开始时正文,0x3c 00 50 00 3e 00是<p>,即HTML的段落标记。看来3c前面的两个00可以用来存放unicode标志。


0:011> eb 001b5942-8 ff fe
0:011> db 001b5942-8
001b593a  ff fe 3c 00 50 00 3e 00-53 5f 74 5e 28 57 a4 4e  ..<.P.>.S_t^(W.N
001b594a  27 59 8c 4e e8 90 fb 8b-66 4e 84 76 f6 65 19 50  'Y.N....fN.v.e.P


eb修改内存
The e* commands enter into memory the values that you specify.
eb : Byte values.
针对文本文件,只要开头加上0xFF FE,就标识是unicode文件了


0:011> .writemem c:\gedu\blog.txt 001b5942-8 L1458
Writing 1458 bytes...


猜你喜欢

转载自blog.csdn.net/hb_zxl/article/details/25835375
今日推荐