我试图了解如何在内存中定位局部变量。我已经反汇编了ac代码,我有指令的地址。我想要存储该变量的内存位置。我试图在 c 代码中访问 i 的指令地址,但变量不在那里。我认为它位于与基指针的“偏移”处。但我不知道偏移的概念。任何帮助将不胜感激。
代码:
int main()
{
int i = 10;
int j = -1;
int k = 4;
int l = 9;
int m;
m = (i-j) + (k-l);
}
反汇编代码
int main()
{
003E13A0 push ebp
003E13A1 mov ebp,esp
003E13A3 sub esp,0FCh
003E13A9 push ebx
003E13AA push esi
003E13AB push edi
003E13AC lea edi,[ebp-0FCh]
003E13B2 mov ecx,3Fh
003E13B7 mov eax,0CCCCCCCCh
003E13BC rep stos dword ptr es:[edi]
int i = 10;
003E13BE mov dword ptr [i],0Ah
int j = -1;
003E13C5 mov dword ptr [j],0FFFFFFFFh
int k = 4;
003E13CC mov dword ptr [k],4
int l = 9;
003E13D3 mov dword ptr [l],9
int m;
m = (i-j) + (k-l);
003E13DA mov eax,dword ptr [i]
003E13DD sub eax,dword ptr [j]
003E13E0 mov ecx,dword ptr [k]
003E13E3 sub ecx,dword ptr [l]
003E13E6 add eax,ecx
003E13E8 mov dword ptr [m],eax
}
003E13EB xor eax,eax
003E13ED pop edi
003E13EE pop esi
003E13EF pop ebx
003E13F0 mov esp,ebp
003E13F2 pop ebp
003E13F3 ret
寄存器
EAX = 001A9478 EBX = 7EFDE000 ECX = 001A8868 EDX = 00000001 ESI = 00000000 EDI = 00000000 EIP = 00BE13A0 ESP = 003BF990 EBP = 003BF9DC EFL = 00000214