好友
阅读权限10
听众
最后登录1970-1-1
|
60吾爱币
IDA反汇编出来的一段代码,研究了好久搞不明白。想请大神帮助解读一下。
请私信。谢谢!
__int64 __fastcall sub_8DAA40(__int64 a1, __int64 a2, _QWORD *a3)
{
unsigned int v3; // ebx
__int64 result; // rax
unsigned __int64 v8; // rdx
unsigned __int64 v9; // rax
int v10; // eax
unsigned __int64 v11; // rcx
char v12[264]; // [rsp+20h] [rbp-148h] BYREF
__int64 v13; // [rsp+128h] [rbp-40h]
v3 = *(unsigned __int8 *)(a1 + 48);
v13 = *(_QWORD *)&pbBuffer;
if ( (_BYTE)v3 )
{
v8 = *(_DWORD *)(a2 + 8) - *(_DWORD *)a2;
v9 = a3[1] - *a3;
if ( v8 > v9 )
{
sub_2144250(a3, v8 - v9);
}
else if ( v8 < v9 )
{
a3[1] = *a3 + v8;
}
sub_1216C20(v12, *(_QWORD *)a1, *(_QWORD *)(a1 + 24), 1i64);
v10 = sub_1216C90(v12, *(_QWORD *)a2, (unsigned int)*(_QWORD *)(a2 + 8) - (unsigned int)*(_QWORD *)a2, *a3);// EAX?
if ( v10 )
{
v11 = a3[1] - *a3;
if ( v10 > v11 )
{
sub_2144250(a3, v10 - v11);
}
else if ( v10 < v11 )
{
a3[1] = v10 + *a3;
}
}
else
{
v3 = 0;
}
sub_1216DE0(v12);
}
result = v3;
if ( *(_QWORD *)&pbBuffer != v13 )
sub_1DB6E70();
return result;
} |
最佳答案
查看完整内容
GPT的回答:
从地址a1偏移48处提取一个值,并将其存储在v3中。
如果v3不为零,则执行以下操作:
计算两个内存地址(a2)之间的差,并将结果存储在v8中。
计算a3中两个值之间的差,并将结果存储在v9中。
根据先前计算的差值调整a3中的值。
使用从内存地址提取的参数调用sub_1216C20。
使用从内存地址提取的参数调用sub_1216C90,如果结果非零,则再次调整a3中的值。
如果以上任何条件失败,则将v3设置为零。
最后,它检查 ...
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|