以下过程返回零终止字符串的地址:
GetExecutablePath proc
local hInstance:HMODULE
local szFileName[MAX_PATH]:BYTE
invoke GetModuleHandle, NULL
mov hInstance, eax
.if hInstance == NULL
xor eax, eax
ret
.endif
invoke GetModuleFileName, hInstance, addr szFileName, sizeof szFileName
.if eax == 000h
xor eax, eax
ret
.endif
lea eax, szFileName
ret
GetExecutablePath endp
在我的主要程序中,我想将此地址的内容复制到另一个本地变量中:
local szPath[MAX_PATH]:BYTE
invoke GetExecutablePath
; MOVE CONTENT OF eax TO szPath
我只找到了将eax的地址复制(mov)到局部变量的方法,但我正在寻找一种方法将引用的内容复制到新变量。
答案 0 :(得分:1)
您正在尝试访问已超出范围的本地变量。这是一个坏主意。相反,您应该重写GetExecutablePath
函数,使其接受指向缓冲区的指针。
无论如何要回答这个问题:从技术上讲,你会使用某种形式的内存块复制。
PS:当你知道它已经为零时,你不必将eax
归零;)
PS#2:您应该忘记masm的高级指令,例如.if
或.while
,并使用相应的asm构造。如果你是初学者,你应该学习这些,如果你不是,那么它不需要额外的努力,你至少可以确切知道你会得到什么。