2010-03-02 7 views
8

Ich habe den folgenden Code:Wie speichere ich den Wert eines Registers in einen Speicherbereich, auf den ein Zeiger zeigt?

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); 

im Code jedoch, wenn ich dereferenzieren den Speicherzeiger (wie in *(int *)storage), ich habe nicht 1. Also, was ist der richtige Weg, um den Wert des Speicherns eines Registers in den Speicher, auf den ein C++ - Zeiger zeigt?

Antwort

5

Sind Sie sicher, dass Sie wissen, was Sie wirklich brauchen? Sie haben den Code angefordert, der den Registerwert in den von malloc zugewiesenen Speicher ("Zeiger") speichern würde, dh *(int*) storage Position, doch Sie haben die Antwort akzeptiert, die den Wert im Zeiger speichert (oder zumindest speichert) selbst, was eine ganz andere Sache ist.

eax in den Speicher zu speichern „wies durch einen Zeiger auf“, dh in *(int*) storage, wie Sie verlangten, würden Sie etwas wie das

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

(Ich benutze den „Intel“ rechts zu tun haben, Nach links Syntax für Assembly Anweisungen, dh mov Kopien von rechts Operand nach links Operand Ich weiß nicht, welche Syntax - rechts nach links oder links nach rechts - Ihr Compiler verwendet.)

Beachten Sie auch dass in mov edi, dword ptr storage der dword ptr Teil ist komplett optional und macht keinen Unterschied egal wie.

+0

meine schlechte, ich denke, du hast Recht.Ich hatte nicht die Zeit zu überprüfen, ob die erste Antwort funktionierte.Es erinnerte mich daran, dass Dinge wie "DWord" existierte, also nahm ich an, es würde das Problem lösen. –

Verwandte Themen