avatar10010 发表于 2014-10-11 15:08:53

win32汇编的局部变量问题(lea)

这里的v1和v2相当于c语言中在main函数内部定义了两个局部变量,可为什么每次运行程序时v1和v2的地址值都一样?(在c语言中他们的地址在每次运行时是不一样的).386
.model flat, stdcall
include    kernel32.inc
includelib kernel32.lib
include    user32.inc
includelib user32.lib
.code
main proc
local v1,v2
    mov v1, 00434241h
    mov v2, 00636261h
    lea eax, v1          ;eax保存v1的地址
    lea ebx, v2          ;ebx保存v2的地址


aa05001 发表于 2014-10-11 16:54:18

变量可以直接把数值赋值进去?

avatar10010 发表于 2014-10-11 17:35:23

aa05001 发表于 2014-10-11 16:54
变量可以直接把数值赋值进去?

你反汇编一下就知道了

dAb 发表于 2014-10-12 03:01:47

对C不熟悉,查了下资料是这样说的(C 的代码必须在函数开始处定义所有局部变量,以便于编译器为所有局部变量准备栈空间。)
所以C的局部变量有变化就不奇怪了
而汇编的LOCAL是直接的sub esp,N ,直接在子程序开头处开辟栈作为变量,后面结束是MOV ESP ,ebp来平衡堆栈,所以地址不变
我觉的这都是编译器的工作原理不同导致的,好像C++和汇编的分配方式差不多,没有去验证过.

avatar10010 发表于 2014-10-12 09:59:42

dAb 发表于 2014-10-12 03:01
对C不熟悉,查了下资料是这样说的(C 的代码必须在函数开始处定义所有局部变量,以便于编译器为所有局部变 ...

Thanks

大个的糖果 发表于 2014-11-1 05:05:53

页: [1]
查看完整版本: win32汇编的局部变量问题(lea)