如何获取MASM32中的地址内容?

时间:2014-04-25 21:20:07

标签: pointers assembly masm masm32

以下过程返回零终止字符串的地址:

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)到局部变量的方法,但我正在寻找一种方法将引用的内容复制到新变量。

1 个答案:

答案 0 :(得分:1)

您正在尝试访问已超出范围的本地变量。这是一个坏主意。相反,您应该重写GetExecutablePath函数,使其接受指向缓冲区的指针。

无论如何要回答这个问题:从技术上讲,你会使用某种形式的内存块复制。

PS:当你知道它已经为零时,你不必将eax归零;)

PS#2:您应该忘记masm的高级指令,例如.if.while,并使用相应的asm构造。如果你是初学者,你应该学习这些,如果你不是,那么它不需要额外的努力,你至少可以确切知道你会得到什么。