我有以下代码:
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 ++指针?
答案 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
部分是完全可选的,并且没有任何区别。