21,497
社区成员




**************************************************************
* FUNCTION *
**************************************************************
undefined4 __stdcall SetOneVIP(char *param_1,undefined4 param_2,undefined1 param_3)
undefined4 EAX:4 <RETURN>
char * Stack[0x4]:4 param_1 XREF[1]: 00406983(R)
undefined4 Stack[0x8]:4 param_2 XREF[1]: 00406944(*)
undefined1 Stack[0xc]:1 param_3 XREF[1]: 00406957(R)
undefined1 Stack[-0x233 local_233 XREF[1]: 004069df(W)
undefined1 Stack[-0x234 local_234 XREF[1]: 004069d3(W)
undefined1 Stack[-0x258 local_258 XREF[7]: 00406969(*),
0040698a(*),
004069a6(*),
004069b5(*),
004069ed(*),
00406a01(*),
00406a2c(*)
undefined4 Stack[-0x260 local_260 XREF[3]: 00406974(RW),
004069fb(RW),
00406a32(RW)
undefined2 Stack[-0x26c local_26c XREF[2]: 00406960(W),
0040697a(W)
undefined4 Stack[-0x27c local_27c XREF[2]: 00406a12(R),
00406a3e(R)
undefined1 Stack[-0x280 local_280 XREF[1]: 0040695a(W)
undefined1 Stack[-0x284 local_284 XREF[2]: 00406948(*),
004069e7(*)
0x692c 30 SetOneVIP
Ordinal_30 XREF[2]: Entry Point(*), 0047c09c(*)
SetOneVIP
0040692c 55 PUSH EBP
分隔线______________________________
undefined4 __stdcall SetOneVIP(char *param_1,undefined4 param_2,undefined1 param_3)
{
char cVar1;
int iVar2;
undefined4 uVar3;
uint uVar4;
uint uVar5;
char *pcVar6;
char *pcVar7;
undefined4 *in_FS_OFFSET;
byte bVar8;
byte local_284 [4];
undefined1 local_280;
undefined4 local_27c;
undefined2 local_26c;
int local_260;
char local_258 [36];
undefined1 local_234;
undefined1 local_233;
/* 0x692c 30 SetOneVIP */
bVar8 = 0;
FUN_00433e6c(0x467e70);
FUN_00433b00((undefined4 *)local_284,¶m_2,4);
local_280 = param_3;
local_26c = 8;
FUN_004016d4((int)local_258);
local_260 = local_260 + 1;
local_26c = 0x14;
FUN_00433b70((undefined4 *)local_258,0,0x10);
uVar4 = 0xffffffff;
do {
pcVar6 = param_1;
if (uVar4 == 0) break;
uVar4 = uVar4 - 1;
pcVar6 = param_1 + (uint)bVar8 * -2 + 1;
cVar1 = *param_1;
param_1 = pcVar6;
} while (cVar1 != '\0');
uVar4 = ~uVar4;
pcVar6 = pcVar6 + -uVar4;
pcVar7 = local_258;
for (uVar5 = uVar4 >> 2; uVar5 != 0; uVar5 = uVar5 - 1) {
*(undefined4 *)pcVar7 = *(undefined4 *)pcVar6;
pcVar6 = pcVar6 + ((uint)bVar8 * -2 + 1) * 4;
pcVar7 = pcVar7 + ((uint)bVar8 * -2 + 1) * 4;
}
for (uVar4 = uVar4 & 3; uVar4 != 0; uVar4 = uVar4 - 1) {
*pcVar7 = *pcVar6;
pcVar6 = pcVar6 + (uint)bVar8 * -2 + 1;
pcVar7 = pcVar7 + (uint)bVar8 * -2 + 1;
}
iVar2 = FUN_004017dc((int)local_258);
if (iVar2 == 0) {
uVar3 = 0x80;
local_260 = local_260 + -1;
FUN_00401740((int)local_258,2);
*in_FS_OFFSET = local_27c;
}
else {
local_234 = DAT_00473814;
local_233 = DAT_00473815;
uVar3 = FUN_00402e5c((uint)local_258,',',local_284,5);
local_260 = local_260 + -1;
FUN_00401740((int)local_258,2);
*in_FS_OFFSET = local_27c;
}
return uVar3;
}
求大神帮忙,希望能知道函数调用方法和参数
这函数名暗示很多东西,可能是:
int __stdcall SetOneVIP(char *name, int id, char sex)
诸如此类的
但是它内部调用的4个func不搞明白作用,光搞这个函数没有意义
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。