1

假设在 masm 中我在数据段中定义了一个变量:

.data
AppName db "PE tutorial ",0

现在在代码部分我定义了几个堆:

invoke GetProcessHeap
mov hmyHeap,eax
invoke HeapAlloc,hmyHeap,HEAP_ZERO_MEMORY,Memsize
mov heap1,eax

现在我们在堆中有一个内存位置,我想将数据段中 AppName 的内存位置更改为这个 heap1 位置。我不想复制内容!我想更改内存位置

4

1 回答 1

3

这是不可能的。当您组装源文件时,该名称AppData将被转换为相对于 的固定偏移量.data(可能稍微简化,但为了理解这一点,所有实例都AppData将替换为.data+0x0000001c,例如)。

因此,在运行时AppData不再有名称,因此您可以更改其内存位置。

对比C:你想做的基本上是

int AppData;
int b;
&AppData = &b;

这在 C 中也不起作用,但会给出error: lvalue required as left operand of assignment. C 解决方案是使用指针:

int *AppData;
int b;
AppData = &b;

同样,您可以在汇编中执行此操作。

AppName db "PE tutorial ",0
AppNamePtr dd ?
;in code, initialize the pointer to AppName's address
;then, when you allocate your heapmemory, change AppNamePtr.
于 2013-10-15T12:38:46.197 回答