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
变量可以直接把数值赋值进去?
你反汇编一下就知道了 对C不熟悉,查了下资料是这样说的(C 的代码必须在函数开始处定义所有局部变量,以便于编译器为所有局部变量准备栈空间。)
所以C的局部变量有变化就不奇怪了
而汇编的LOCAL是直接的sub esp,N ,直接在子程序开头处开辟栈作为变量,后面结束是MOV ESP ,ebp来平衡堆栈,所以地址不变
我觉的这都是编译器的工作原理不同导致的,好像C++和汇编的分配方式差不多,没有去验证过. dAb 发表于 2014-10-12 03:01
对C不熟悉,查了下资料是这样说的(C 的代码必须在函数开始处定义所有局部变量,以便于编译器为所有局部变 ...
Thanks
页:
[1]