首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
软件逆向
发新帖
1
0
[推荐]汇编与反汇编之小技巧
发表于: 2008-7-8 10:25
8709
[推荐]汇编与反汇编之小技巧
billlin
1
2008-7-8 10:25
8709
汇编与反汇编之小技巧
大家都知道,对于位于当前调试目标中的指令,可以使用WinDBG的u命令进行反汇编。u命令的参数是要反汇编代码的地址值或者符号,如果不指定,那么WinDBG会使用当前程序指针寄存器所指向的代码,例如:
0:001> u
ntdll!DbgBreakPoint:
7c901230 cc int 3
7c901231 c3 ret
如果要想将汇编指令翻译为机器码,那么应该使用a命令,a命令使用的参数格式与u命令相同,只不过参数的含义代表的是要产生的机器码要存放的起始地 址。例如执行a 0x400000命令后,WinDBG会启动交互式编辑提示符(Input>),而后便可以输入汇编指令,没输入一条后,按回车,然后可以继续输入 下一条,结束时直接按回车。
举个实际的例子,启动记事本程序,然后将WinDBG附加上去,此时执行u命令看到的就是上面的反汇编结果,也就是EIP指向的是ntdll中的 DbgBreakPoint函数,这个函数只有两条指令。接下来执行a命令,在Input提示符后输入nop然后按回车,而后再按回车结束汇编操作。
此时再执行u ntdll!DbgBreakPoint命令,可以看到:
0:001> u
ntdll!DbgBreakPoint:
7c901230 90 nop
7c901231 c3 ret
可见本来的INT 3指令被替换为nop指令(机器码为90)了。
输入g命令恢复记事本程序执行,然后再按Ctrl+Break试图将其中断到调试器,发现不立刻反应了,这是因为远程中断所依赖的ntdll!DbgBreakPoint函数的INT 3指令被我们替换为NOP(空指令)了。不过当WinDBG发现中断操作超时后会使用挂起的方式来中断(感兴趣的读者,可以参考《软件调试》的10.6.7节)。
上面是基本的反汇编和汇编用法。下面再说一种特殊的用法。
如果我们在日志文件或者其它环境中看到一段机器码,那么如何将其翻译为汇编指令呢?u命令是不支持后面直接跟随机器码的。
这时一种简单的方法就是找一段内存,然后将要反汇编的机器码输入到这段内存中,然后再使用u命令。哪里找这段内存呢?这段内存必须可以写。通常可以 选择栈。具体来说,先使用r命令观察目前的栈顶地址,即ESP寄存器的值。为了不破坏栈上的数据,应该使用比ESP小的空闲区域。
例如:
0:001> r
eax=7ffd7000 ebx=00000001 ecx=00000002 edx=00000003 esi=00000004 edi=00000005
eip=7c901230 esp=00beffcc ebp=00befff4 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246
ntdll!DbgBreakPoint:
7c901230 90 nop
上面的esp=00beffcc,如果我们要反汇编十几个字节的机器码,那么就可以使用00beff00开始的一段,即输入eb 00beff00,开始交互式编辑内存,输入要反汇编的机器码。
89.1E.83.C9.FF.F0.0F.C1.08.FF.75.08.E8.FD.0A.FD.FF.8B.45.08.5E.5B.5D.C2.08.00.CC.CC.CC.CC.CC.
输入结束后,再执行u 00beff00
0:001> u 00beff00
00beff00 891e mov dword ptr [esi],ebx
00beff02 83c9ff or ecx,0FFFFFFFFh
00beff05 f00fc108 lock xadd dword ptr [eax],ecx
00beff09 ff7508 push dword ptr [ebp+8]
00beff0c e8fd0afdff call 00bc0a0e
00beff11 8b4508 mov eax,dword ptr [ebp+8]
00beff14 5e pop esi
00beff15 5b pop ebx
《软件调试》电子书下载:
b23K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0$3i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8Y4u0W2M7$3!0#2M7X3y4W2i4K6u0r3M7X3A6@1M7#2)9J5k6i4m8V1k6R3`.`.
高端调试:
1b6K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3q4V1N6X3c8T1k6#2)9J5k6h3!0J5k6#2)9J5c8R3`.`.
《Windows用户态程序高效排错》下载:
f79K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6K6i4K6u0W2L8i4y4V1L8W2)9J5k6h3y4G2L8g2)9J5c8X3I4A6P5r3W2G2L8X3N6Q4x3V1k6S2N6s2c8S2j5$3S2E0k6h3&6@1i4K6u0r3y4K6b7$3x3K6x3&6i4K6u0W2j5i4y4Z5P5l9`.`.
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
#调试逆向
收藏
・
1
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
16
)
lixupeng
雪 币:
559
活跃值:
(349)
能力值:
( LV2,RANK:10 )
在线值:
发帖
31
回帖
1636
粉丝
0
关注
私信
lixupeng
2
楼
顶!!!!
2008-7-8 12:35
0
qduwg
雪 币:
475
活跃值:
(1130)
能力值:
( LV9,RANK:1410 )
在线值:
发帖
72
回帖
286
粉丝
3
关注
私信
qduwg
35
3
楼
WinDBG这个工具还没有用过的。不知到底能够干什么?
2008-7-8 13:16
0
ChamPagneZ
雪 币:
203
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
1
回帖
26
粉丝
0
关注
私信
ChamPagneZ
4
楼
老师好
2008-7-8 17:03
0
fhqypm
雪 币:
200
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
5
粉丝
0
关注
私信
fhqypm
5
楼
顶..看来我真是菜这都看不懂
2008-7-9 23:52
0
wynney
雪 币:
224
活跃值:
(147)
能力值:
( LV9,RANK:970 )
在线值:
发帖
65
回帖
1109
粉丝
8
关注
私信
wynney
24
6
楼
这本书连书中讲解的部分Src(应该是作者自己觉得重要的,作为技术保留的)都没提供的
2008-7-10 10:03
0
wmjm
雪 币:
223
活跃值:
(33)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
72
粉丝
0
关注
私信
wmjm
7
楼
又学习了一些知识,谢谢楼主。
2008-7-10 17:42
0
huangflong
雪 币:
212
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
3
回帖
105
粉丝
0
关注
私信
huangflong
8
楼
下載來學習學習
2008-7-10 19:43
0
Sysnap
雪 币:
581
活跃值:
(149)
能力值:
( LV12,RANK:600 )
在线值:
发帖
32
回帖
389
粉丝
10
关注
私信
Sysnap
14
9
楼
这本书有买....的确很厚的一本..简单看了下里面的内容很丰富.....可能还没看到后面吧...觉得具体的例子比较少......代码也的确很少
2008-7-10 21:35
0
yansmin
雪 币:
200
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
3
回帖
19
粉丝
0
关注
私信
yansmin
10
楼
汇编好久不用都忘了,得重新学习!
2008-7-14 15:01
0
arries
雪 币:
220
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
1
回帖
76
粉丝
0
关注
私信
arries
11
楼
如果我们在日志文件或者其它环境中看到一段机器码,那么如何将其翻译为汇编指令呢?u命令是不支持后面直接跟随机器码的。……
吃力不讨好啊。。。一个个输入岂不太累,.readmem应该就可以了吧
2008-7-14 16:15
0
WINIO
雪 币:
203
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
5
粉丝
0
关注
私信
WINIO
12
楼
好,正需要这方面的东西
2008-7-16 17:36
0
pagechina
雪 币:
101
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
2
回帖
22
粉丝
0
关注
私信
pagechina
13
楼
偶一直用ida...很强大..很喜欢
2008-7-17 09:03
0
askyer
雪 币:
214
活跃值:
(12)
能力值:
( LV2,RANK:10 )
在线值:
发帖
3
回帖
56
粉丝
0
关注
私信
askyer
14
楼
windbg哪儿有的下?
2008-7-17 09:49
0
小小愿望
雪 币:
203
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
3
回帖
20
粉丝
0
关注
私信
小小愿望
15
楼
应该是驱动调试用的
2008-7-17 11:49
0
Kendiv
雪 币:
230
活跃值:
(164)
能力值:
( LV2,RANK:10 )
在线值:
发帖
1
回帖
106
粉丝
0
关注
私信
Kendiv
16
楼
~~~ WinDbg还是要用滴~~ 莫要小看WinDbg~~ 呵呵
2008-7-20 19:38
0
三根火柴
雪 币:
268
活跃值:
(50)
能力值:
( LV10,RANK:170 )
在线值:
发帖
32
回帖
255
粉丝
0
关注
私信
三根火柴
4
17
楼
支持一下!!
2008-7-21 08:17
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
billlin
1
23
发帖
68
回帖
50
RANK
关注
私信
他的文章
[推荐]在内核调试会话中设置用户态断点
5418
[下载]windbg的标准命令列表
4032
[下载]Windbg的标准命令列表
5559
[原创]我的第一次策划实践(二)——初入目录分析之门
16616
[推荐]D1蓝屏、指针和安全的代价
6804
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部