学用软件,我把加密解密书上那段小程序输入了
struct student
{
long id;
char name[20];
long age;
};
student stu[2]={{10,"person1",20},{12,"Person2",30}};
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("错误: MFC 初始化失败\n"));
nRetCode = 1;
}
else
{
student *p=stu;
for (int i=0;i<2;i++)
{
printf("%d=%d,%s,%d\n",i,p->id,p->name,p->age);
p++;
}
}
return nRetCode;
}
VS2005编译后
然后用IDA载入就遇到问题了,编译器吧结构体偏移指到了中间的name上了,我怎样才可以吧esi-4指向结构体头部??
.text:0040103B xor edi, edi
.text:0040103D mov esi, offset aPerson1 ; "person1"
.text:00401042
.text:00401042 loc_401042: ; CODE XREF: _main+5Fj
.text:00401042 mov eax, [esi+14h]
.text:00401045 mov ecx, [esi-4]
.text:00401048 push eax
.text:00401049 push esi
.text:0040104A push ecx
.text:0040104B push edi
.text:0040104C push offset aDDSD ; "%d=%d,%s,%d\n"
.text:00401051 call ebx ; printf
.text:00401053 add edi, 1
.text:00401056 add esp, 14h
.text:00401059 add esi, 1Ch
.text:0040105C cmp edi, 2
.text:0040105F jl short loc_401042
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法