首页
社区
课程
招聘
奇怪的反汇编代码
2010-2-7 15:44 7068

奇怪的反汇编代码

2010-2-7 15:44
7068
先看一段C代码:
BOOL Func(char *s1, char *s2)
{
if (lstrcmpA(s1, s2) == 0)
{
return TRUE;
}
return FALSE;
}


反汇编后是这样的
00401480  /$  8B4424 08     mov     eax, dword ptr [esp+8]
00401484  |.  8B4C24 04     mov     ecx, dword ptr [esp+4]
00401488  |.  50            push    eax                              ; /String2
00401489  |.  51            push    ecx                              ; |String1
0040148A  |.  FF15 00204000 call    dword ptr [<&KERNEL32.lstrcmpA>] ; \lstrcmpA
00401490  |.  F7D8          neg     eax
00401492  |.  1BC0          sbb     eax, eax
00401494  |.  40            inc     eax
00401495  \.  C3            retn
00401496      90            nop


我有点搞不懂,为什么不是下面这样的呢?
00401480  /$  8B4424 08     mov     eax, dword ptr [esp+8]
00401484  |.  8B4C24 04     mov     ecx, dword ptr [esp+4]
00401488  |.  50            push    eax                              ; /String2
00401489  |.  51            push    ecx                              ; |String1
0040148A  |.  FF15 00204000 call    dword ptr [<&KERNEL32.lstrcmpA>] ; \lstrcmpA
00401494  |.  40            inc     eax
00401495  \.  C3            retn
00401496      90            nop


干嘛要neg 对eax取反
然后再 sbb
直接 eax++ 不是一样的吗?

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞3
打赏
分享
最新回复 (19)
雪    币: 424
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
resty 2 2010-2-7 15:53
2
0
我又来了
你的实现有问题,当lcmpstrA返回的不为0的时候,按理来说这个函数要返回0,但你的方法就不会返回0吧
雪    币: 2071
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
sessiondiy 4 2010-2-7 15:56
3
0
lstrcmp 不是只会传回 0 ' 1
而是 正数 ' 零 ' 负数 三种
上面的写法可使得 只有 EAX=零 时, 才能 ret EAX=1
EAX= 正数 or 负数 时 , ret EAX=0
雪    币: 424
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
resty 2 2010-2-7 15:59
4
0
膜拜ls大牛,我不敢要分了
雪    币: 2071
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
sessiondiy 4 2010-2-7 16:00
5
0
6 ' 4 分帐
雪    币: 454
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
blueapplez 14 2010-2-7 16:06
6
0
谁6谁4啊?
晕  

我好像懂了

eax作为strcmp的返回值
当eax=0时  要返回1
当eax为其他时  要返回0
我的逻辑是错误的

但是有一点不懂,那个neg是干嘛的 去掉 neg eax这句不也很完美吗?
雪    币: 2071
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
sessiondiy 4 2010-2-7 16:09
7
0
neg 是为了要设 CF 旗号

因为 sbb 指令是 A - B - CF

sbb eax, eax  =>  0 - CF
雪    币: 454
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
blueapplez 14 2010-2-7 16:11
8
0
懂了  膜拜2位 大牛! 5,5分吧   万一你们俩打架多不好!
雪    币: 2071
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
sessiondiy 4 2010-2-7 16:13
9
0
ok
123
雪    币: 454
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
blueapplez 14 2010-2-7 16:19
10
0
补充点汇编基础知识吧
neg指令详细解释
规则:1. neg reg (对寄存器操作)
   2. neg mem(对内存操作)
作用:将目的操作数的所以数据位取反加1
影响的标志:进位标志(CF),零标志(ZF),符合标志(SF),溢出标志(OF),辅助进位标志(AF),奇偶标志(PF)
当操作数为0时,置CF位为0
当操作数不为0时,置CF位为1


sbb指令
sbb a,b => a=a-b-CF


所以对开始那段反汇编的解释就是这样的:
先neg一下,
①如果是eax = 0
则CF=0
sbb eax,eax后 eax=0
inc eax后 eax =1
最后eax=1,返回1
②如果eax !=0,
则CF=1
sbb eax,eax后eax=0xFFFFFFFF
inc eax后eax=0
最后eax=0,返回0


连接:http://hi.baidu.com/blueapple_c/blog/item/e795492bf89db2335243c1f7.html
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
贾宝玉 2010-2-10 22:18
11
0
哦。Apple兄这个问题很好,我有些茅塞顿开了
雪    币: 454
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
blueapplez 14 2010-2-10 23:55
12
0
能对你有帮助,我很开心,哈哈。。。
雪    币: 2071
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
sessiondiy 4 2010-2-11 00:41
13
0
你是女生 ?
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zapline 2010-2-11 00:41
14
0
大哥眼力不错
雪    币: 454
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
blueapplez 14 2010-2-11 09:14
15
0
请喊我美女!  
ps.  S大是我妹妹 ,虽然没我俊。。。

Go on ps:为什么在我的笔记本上看我的头像挺正常的,在公司这个CRT显示器上怎么就这么黑?
雪    币: 2071
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
sessiondiy 4 2010-2-11 11:37
16
0
电灯要开..
上传的附件:
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiilin 2010-2-11 15:35
17
0
哇塞,又发现一个美女~~
雪    币: 454
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
blueapplez 14 2010-2-11 18:48
18
0
咳咳。。。不能再水了昂
雪    币: 270
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
SIsIa 2010-2-16 21:56
19
0
1.你的笔记本太亮了。
2.你公司的笔记本太暗了。
3.你不给我加分。
4.人品问题。
雪    币: 154
活跃值: (213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
block81838 2023-5-10 17:49
20
0
感谢解答  我也懂了
游客
登录 | 注册 方可回帖
返回