更改内存中变量的位置

时间:2013-10-15 08:21:11

标签: assembly masm

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

.data
AppName db "PE tutorial ",0

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

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

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

1 个答案:

答案 0 :(得分: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.