У меня есть следующий код:
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++?
Вы уверены, что знаете, что вам действительно нужно? Вы запросили код, который сохранит значение регистра в памяти, выделенной с помощью malloc
(«указывается указателем»), то есть * (int *) место хранения
, но вы согласились ответ, который сохраняет (или, по крайней мере, пытается сохранить) значение в самом указателе, а это совсем другое дело.
Чтобы сохранить eax
в памяти, "на которую указывает указатель", то есть в * (int *) storage
, как вы просили, вам нужно будет сделать что-то подобное
mov edi, dword ptr storage
mov dword ptr [edi], eax
(Я использую синтаксис "Intel" с написанием справа налево для инструкций сборки, то есть mov
копирует правый операнд в левый операнд. Я не знаю, какой синтаксис - справа налево или слева направо - ваш компилятор использует.)
Также обратите внимание, что в mov edi, dword ptr storage
часть dword ptr
является полностью необязательной и не имеет никакого значения.