如何将寄存器的值存储到指针指向的内存位置?

时间:2010-03-02 14:23:58

标签: c++ pointers assembly x86

我有以下代码:

void * storage = malloc( 4 );

__asm
{
    //assume the integer 1 is stored in eax
    mov eax, storage  //I've tried *storage as well but apparently it's illegal syntax
}
/* other code here */
free(storage);

但是,在代码中,当我取消引用存储指针时(如在*(int *)storage中),我没有得到1.那么,将寄存器的值存储到指向的内存中的正确方法是什么用C ++指针?

1 个答案:

答案 0 :(得分:5)

你确定你知道你真正需要什么吗?您请求将寄存器值存储到由malloc(“指针指向”)分配的内存中的代码,即*(int*) storage位置,但您接受了存储(或至少尝试)的答案将值存储到指针本身,这是完全不同的事情。

要将eax存储到“由指针指向”的内存中,即按照您的要求存入*(int*) storage,您必须执行类似的操作

mov  edi, dword ptr storage
mov  dword ptr [edi], eax

(我使用“英特尔”从右到左的语法进行汇编指令,即从右操作数到左操作数的mov个副本。我不知道哪个语法 - 从右到左或左 - to-right - 您的编译器正在使用。)

另请注意,在mov edi, dword ptr storage中,dword ptr部分是完全可选的,并且没有任何区别。