質問:非PODクラス内からアセンブリ内のメンバー変数にアクセスするにはどうすればよいですか?インラインアセンブリ内のC++クラスメンバーへのアクセス
推敲:
私はクラスのメンバ関数のためのいくつかのインラインアセンブリコードを書かれたが、どのような私を見逃さすることは、クラスのメンバ変数にアクセスする方法ですしています。私はオフセットマクロを試しましたが、これは非PODクラスです。
私が使用している現在の解決策は、グローバルスコープからメンバ変数へのポインタを割り当てることですが、それは面倒な解決策であり、私が知っていないより良いものがあることを期待していました。
メモ:私はG ++コンパイラを使用しています。 Intelの構文Asmの解決策はいいかもしれませんが、私は何でも取っていきます。私は(インテル構文を)やりたいことの
例:
class SomeClass
{
int* var_j;
void set4(void)
{
asm("mov var_j, 4"); // sets pointer SomeClass::var_j to address "4"
}
};
現在のハックソリューション:
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 :(
}
};
ものは、粗例ですが、私は、彼らは全体のポイントを得ると思います。
G + +コンパイラが出力するコードを 'var_j = 4;'というようなコードで逆アセンブルしようとしましたか? –
グローバルポインタを使用してスレッドセーフではありません。保存された値を再割り当てする前に値が上書きされる可能性があります。 – xmoex