首页
社区
课程
招聘
[分享]反一段代码发现这段汇编,源代码有分支,而汇编看不到分支
发表于: 2008-4-17 17:47 7145

[分享]反一段代码发现这段汇编,源代码有分支,而汇编看不到分支

2008-4-17 17:47
7145
mov     eax, [edi+60h]
mov     esi, [eax+8] -----得一个值  
sub     esi, 14h       -----去掉0x14 结果是 0 或 其他 ( >=0x14 CF为0  <0x14 CF 为1)
neg     esi               ----- 补 得 0x00000000 或 其他
sbb     esi, esi       -----esi = esi - esi -cf   得到是(cf为0时 是0x00000000 为1时 是0xffffffff )
and     esi, 0C000000Dh   -----& 结果是0x00000000或者0x0C000000D

if ((IoGetCurrentIrpStackLocation(Irp)->Parameters.SetFile.FileInformationClass >=FileEndOfFileInformation))
     {
        Status = STATUS_SUCCESS;//0x00000000
     }
     else
     {
        Status = STATUS_INVALID_PARAMETER;//0x0C000000D
     }

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 7
支持
分享
最新回复 (6)
雪    币: 224
活跃值: (16)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
本人比较菜,牛人勿笑
2008-4-17 17:54
0
雪    币: 297
活跃值: (27)
能力值: ( LV13,RANK:380 )
在线值:
发帖
回帖
粉丝
3
总结:
条件判断语句if ( == )常用sub, neg, sbb的组合,后续指令视情况而定。
如果是if ( == ) { = 0; } else { = !0; },后续指令可以是and

感谢分享
2008-4-17 18:44
0
雪    币: 44229
活跃值: (19965)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
VC优化会有这样的代码生成。
如:
	 if(FindWindow(NULL,"计算器"))
		return 1;
	 else	
		return 5;

优化编译后:
00401000  push  	406030                       	;/Title = "计算器"
00401005  push  	0                             	;|Class = 0
00401007  call  	dword ptr [40509C]         	;\FindWindowA
0040100D  neg   	eax
0040100F  sbb   	eax, eax
00401011  and   	al, 0FC
00401013  add   	eax, 5
00401016  retn
2008-4-17 21:12
0
雪    币: 224
活跃值: (147)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
5
编译器自动优化的效果
2008-4-17 22:35
0
雪    币: 107
活跃值: (326)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
IoGetCurrentIrpStackLocation(Irp)->支持...


学习了....自己写个代码也瞧瞧..还真没关注过这个问题.
2008-4-18 18:43
0
雪    币: 193
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不错啊,以后写汇编也可这样写了!
2008-4-20 13:57
0
游客
登录 | 注册 方可回帖
返回
//