在内存中处理推送的参数

时间:2009-09-09 12:21:43

标签: assembly x86

; int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd)
_wWinMain@16 proc near

var_8= dword ptr -8
var_4= dword ptr -4
hInstance= dword ptr  8
hPrevInstance= dword ptr  12
lpCmdLine= dword ptr  16
nShowCmd= dword ptr  20

如果我有一个dword变量     [ebp + 4],是指变量     包含在[ebp + 4]到的范围内     [ebp + 8],或[ebp + 4]到[ebp]?下面描述的是正确的吗?

[ - 12,-08]

[ - 08,-04] var_8

[ - 04,00] var_4

[00,+ 04] ebp

[+ 04,+ 08]

[+ 08,+ 12] hInstance

[+ 12,+ 16] hPrevInstance

[+ 16,+ 20] lpCmdLine

[+ 20,+ 24] nShowCmd

[+ 24,+ 28]

由于

1 个答案:

答案 0 :(得分:1)

您的理解是正确的。尽管堆栈向下增长,但内存中的多字节值存储在来自基础的增加的内存地址中。 dword变量将存储在ebp + 4,ebp + 5,ebp + 6,ebp + 7中。 ebp + 4将是最低阶字节(因为x86是little-endian)。