学习目标:
编写代码遍历任务列表
//当前执行中的所有任务
[[[0XF598C0]+2A4]+4C4]=edi
[[[0XF598C0]+2A4]+4C8]
//所有可执行任务 edi
[[[0XF598C0]+2A4]+4D4]=edi
[[[0XF598C0]+2A4]+4D8]
[[[0XF598C0]+2A4]+4C4]+8
dc [0x2FA3D6C]+ edi*0xc0+4]*0c0+4
void printfMissionList()
{
DWORD ndStart;
DWORD ndEnd;
char *szpCurMissionName;
//[[[0XF598C0]+2A4]+4C4] //起始地址
//[[[0XF598C0]+2A4]+4C8] //结束地址
//[[[0XF598C0]+2A4]+4C4]+8
// dc [0x2FA3D6C]+ [[[0XF598C0]+2A4]+4c4]*0xc0+4]*0c0+4
__try
{
ndStart=*(DWORD*)BaseF1_F10ArgEcx;
ndStart=*(DWORD*)(ndStart+0x2A4);
ndStart=*(DWORD*)(ndStart+0x4d4);
ndEnd=*(DWORD*)BaseF1_F10ArgEcx;
ndEnd=*(DWORD*)(ndEnd+0x2A4);
ndEnd=*(DWORD*)(ndEnd+0x4d8);
__asm
{
mov edi,ndStart
GotoStart:
MOV EAX,DWORD PTR DS:[EDI]
MOV ECX,DWORD PTR DS:[0x2FA3D6C] ;// 150C4
LEA EAX,DWORD PTR DS:[EAX+EAX*2] ; // [edx*3]
SHL EAX,0x6 ;// eax=eax*0x40 [edi]*0xc0
CMP DWORD PTR DS:[EAX+ECX+0x18],0x10
LEA EAX,DWORD PTR DS:[EAX+ECX+0x4] ;// [0x2FA3D6C]+[edi]*0xc0+4
JB EndMission
MOV EAX,DWORD PTR DS:[EAX]
EndMission:
mov szpCurMissionName,eax
}
DbgPrintf_Mine("%s \r\n",szpCurMissionName);
_asm{
add edi,8
cmp edi,ndEnd
jnz GotoStart
}
}__except(1)
{
DbgPrintf_Mine("遍历任务列表出错\r\n");
}
return;
}
编写代码遍历任务列表
//当前执行中的所有任务
[[[0XF598C0]+2A4]+4C4]=edi
[[[0XF598C0]+2A4]+4C8]
//所有可执行任务 edi
[[[0XF598C0]+2A4]+4D4]=edi
[[[0XF598C0]+2A4]+4D8]
[[[0XF598C0]+2A4]+4C4]+8
dc [0x2FA3D6C]+ edi*0xc0+4]*0c0+4
void printfMissionList()
{
DWORD ndStart;
DWORD ndEnd;
char *szpCurMissionName;
//[[[0XF598C0]+2A4]+4C4] //起始地址
//[[[0XF598C0]+2A4]+4C8] //结束地址
//[[[0XF598C0]+2A4]+4C4]+8
// dc [0x2FA3D6C]+ [[[0XF598C0]+2A4]+4c4]*0xc0+4]*0c0+4
__try
{
ndStart=*(DWORD*)BaseF1_F10ArgEcx;
ndStart=*(DWORD*)(ndStart+0x2A4);
ndStart=*(DWORD*)(ndStart+0x4d4);
ndEnd=*(DWORD*)BaseF1_F10ArgEcx;
ndEnd=*(DWORD*)(ndEnd+0x2A4);
ndEnd=*(DWORD*)(ndEnd+0x4d8);
__asm
{
mov edi,ndStart
GotoStart:
MOV EAX,DWORD PTR DS:[EDI]
MOV ECX,DWORD PTR DS:[0x2FA3D6C] ;// 150C4
LEA EAX,DWORD PTR DS:[EAX+EAX*2] ; // [edx*3]
SHL EAX,0x6 ;// eax=eax*0x40 [edi]*0xc0
CMP DWORD PTR DS:[EAX+ECX+0x18],0x10
LEA EAX,DWORD PTR DS:[EAX+ECX+0x4] ;// [0x2FA3D6C]+[edi]*0xc0+4
JB EndMission
MOV EAX,DWORD PTR DS:[EAX]
EndMission:
mov szpCurMissionName,eax
}
DbgPrintf_Mine("%s \r\n",szpCurMissionName);
_asm{
add edi,8
cmp edi,ndEnd
jnz GotoStart
}
}__except(1)
{
DbgPrintf_Mine("遍历任务列表出错\r\n");
}
return;
}