浮点指令的逆向求解
Author:zfive5(zhaozidong)
Email:zfive5@yahoo.com.cn
晚上在csdn上看到一个网友给我发过来的一个浮点运算指令的问题,说实话之前没有怎样使用,对它的内部也不是特别清楚,只是业余时简单翻过书而已,但灵机一动想到另类求解方法,在vc2005下编写一个两个浮点数比较的c++代码,然后在调试状态下看汇编代码就可以得到结果了,真可谓条条大路通罗马。
int _tmain(int argc, _TCHAR* argv[])
{
float a1=1.0;
float a2=2.0;
if(a1>a2)
{
return 1;
}
return 2;
}
int _tmain(int argc, _TCHAR* argv[])
{
00411360 push ebp
00411361 mov ebp,esp
00411363 sub esp,0D8h
00411369 push ebx
0041136A push esi
0041136B push edi
0041136C lea edi,[ebp-0D8h]
00411372 mov ecx,36h
00411377 mov eax,0CCCCCCCCh
0041137C rep stos dword ptr es:[edi]
float a1=1.0;
0041137E fld1
00411380 fstp dword ptr [a1]
float a2=2.0;
00411383 fld dword ptr [__real@40000000 (41563Ch)]
00411389 fstp dword ptr [a2]
if(a1>a2)
0041138C fld
dword ptr [a1]
0041138F fld
dword ptr [a2]
00411392 fcompp
00411394 fnstsw
ax
00411396 test
ah,5
00411399 jp
wmain+42h (4113A2h)
{
return 1;
0041139B mov eax,1
004113A0 jmp wmain+47h (4113A7h)
}
return 2;
004113A2 mov eax,2
}
这些天真的忙,闲暇还是要看书和听音乐,周围都是小朋友,发现自己老了!