Frage: Wie kann ich auf eine Elementvariable in Assembly aus einer Nicht-POD-Klasse zugreifen?Zugreifen auf C++ - Klassenelement in Inline-Assembly
Herstellung:
ich einige Inline-Assembler-Code für eine Klasse-Memberfunktion geschrieben, aber was mir entzieht sich, wie Klasse Membervariablen zugreifen. Ich habe versucht, die offsetof Makro, aber das ist eine Nicht-POD-Klasse.
Die aktuelle Lösung, die ich verwende, ist, einen Zeiger aus dem globalen Bereich auf die Elementvariable zuzuweisen, aber es ist eine unordentliche Lösung und ich hatte gehofft, dass es etwas Besseres gibt, von dem ich nichts weiß.
Hinweis: Ich verwende den G ++ - Compiler. Eine Lösung mit Intel Syntax Asm wäre nett, aber ich nehme alles.
Beispiel dafür, was ich (Intel-Syntax) zu tun:
class SomeClass
{
int* var_j;
void set4(void)
{
asm("mov var_j, 4"); // sets pointer SomeClass::var_j to address "4"
}
};
aktuelle hackish Lösung:
int* global_j;
class SomeClass
{
int* var_j;
void set4(void)
{
asm("mov global_j, 4"); // sets pointer global_j to address "4"
var_j = global_j; // copy it back to member variable :(
}
};
Das sind grobe Beispiele, aber ich denke, dass sie den Punkt zu vermitteln .
Haben Sie versucht, eine Disassemblierung dessen zu betrachten, was der G ++ - Compiler mit dem Code 'var_j = 4;' oder so ähnlich ausgibt? –
die Verwendung eines globalen Zeigers ist nicht threadsicher, da der Wert möglicherweise überschrieben wird, bevor der gespeicherte Wert neu zugewiesen wird – xmoex