9.2 Local variables example
让我们修改一下例子:
Listing 9.2: 局部变量
void main()
{
int sum, product; // now variables are here
f1(123, 456, &sum, &product);
printf ("sum=%d, product=%d
", sum, product);
};
f1()函数代码没有改变。仅仅main()代码作了修改。
Listing 9.3: Optimizing MSVC 2010 (/Ox /Ob0)
_product$ = -8 ; size = 4
_sum$ = -4 ; size = 4
_main PROC
; Line 10
sub esp, 8
; Line 13
lea eax, DWORD PTR _product$[esp+8]
push eax
lea ecx, DWORD PTR _sum$[esp+12]
push ecx
push 456 ; 000001c8H
push 123 ; 0000007bH
call _f1
; Line 14
mov edx, DWORD PTR _product$[esp+24]
mov eax, DWORD PTR _sum$[esp+24]
push edx
push eax
push OFFSET $SG2803
call DWORD PTR __imp__printf
; Line 15
xor eax, eax
add esp, 36 ; 00000024H
ret 0
我们在OD中查看,局部变量地址在堆栈中是0x35FCF4和0x35FCF8。我们可以看到是如何圧栈的fig. 9.6.
f1()开始的时候,随机栈地址为0x35FCF4和0x35FCF8 fig. 9.7.
f1()完成时结果0xDB18和0x243存放在地址0x35FCF4和0x35FCF8。
Figure 9.6: OllyDbg: 局部变量地址被圧栈
Figure 9.7: OllyDbg: f1()starting
Figure 9.8: OllyDbg: f1()finished
当前内容版权归 Dennis Yurichev 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 Dennis Yurichev .