给大家拜年了,在练习逆向的时候,有一个小地方出了一些问题,问题在题目里给出了,下面把具体情况描述下,希望大家能抽空帮忙给看看,首先给出是一段程序的代码:
void CDisplay::ResizeScene(GLsizei width, GLsizei height)
{
if (height == 0)
{
height = 1;
}
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(56.0f, (GLfloat)width / (GLfloat)height, 1.f, 1800.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
然后在ida里面的代码如下:
.text:00409E21 ResizeScene proc near ; CODE XREF: GameInit+191p
.text:00409E21 ; sub_418182+FDp
.text:00409E21
.text:00409E21 var_1C = qword ptr -1Ch
.text:00409E21 var_4 = dword ptr -4
.text:00409E21 arg_0 = dword ptr 8
.text:00409E21 arg_4 = dword ptr 0Ch
.text:00409E21
.text:00409E21 push ebp
.text:00409E22 mov ebp, esp
.text:00409E24 push ecx
.text:00409E25 mov [ebp+var_4], ecx
.text:00409E28 cmp [ebp+arg_4], 0
.text:00409E2C jnz short loc_409E35
.text:00409E2E mov [ebp+arg_4], 1
.text:00409E35
.text:00409E35 loc_409E35: ; CODE XREF: ResizeScene+Bj
.text:00409E35 mov eax, [ebp+arg_4]
.text:00409E38 push eax
.text:00409E39 mov ecx, [ebp+arg_0]
.text:00409E3C push ecx
.text:00409E3D push 0
.text:00409E3F push 0
.text:00409E41 call ds:glViewport
.text:00409E47 push 1701h
.text:00409E4C call ds:glMatrixMode
.text:00409E52 call ds:glLoadIdentity
.text:00409E58 push 409C2000h
.text:00409E5D push 0
.text:00409E5F push 3FF00000h
.text:00409E64 push 0
.text:00409E66 fild [ebp+arg_0]
.text:00409E69 fidiv [ebp+arg_4]
.text:00409E6C sub esp, 8
.text:00409E6F fstp [esp+1Ch+var_1C]
.text:00409E72 push 404C0000h
.text:00409E77 push 0
.text:00409E79 call gluPerspective
.text:00409E7E push 1700h
.text:00409E83 call ds:glMatrixMode
.text:00409E89 call ds:glLoadIdentity
.text:00409E8F mov esp, ebp
.text:00409E91 pop ebp
.text:00409E92 retn 8
.text:00409E92 ResizeScene endp
ida F5给出的C:
int __thiscall ResizeScene(void *this, signed int a2, signed int a3)
{
int v3; // ST20_4@3
void *v5; // [sp+18h] [bp-4h]@1
v5 = this;
if ( !a3 )
a3 = 1;
glViewport(0, 0, a2, a3);
glMatrixMode(5889);
glLoadIdentity(v5);
gluPerspective(
0,
1078722560,
COERCE_UNSIGNED_INT64((double)a2 / (double)a3),
COERCE_UNSIGNED_INT64((double)a2 / (double)a3) >> 32,
0,
1072693248,
0,
1083973632);
glMatrixMode(5888);
return glLoadIdentity(v3);
}
请教各位,gluPerspective的参数明明四个,为什么F5的代码这里有8个?而且我计算这些数据,当作浮点数据的时候也不知道是怎么得来的?
希望有知道的朋友能够指点,祝各位新春快乐。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)