【发布时间】:2011-01-03 09:18:16
【问题描述】:
问题:如何从非 POD 类中访问程序集中的成员变量?
阐述:
我已经为类成员函数编写了一些内联汇编代码,但我不知道如何访问类成员变量。我试过 offsetof 宏,但这是一个非 POD 类。
我正在使用的当前解决方案是将全局范围的指针分配给成员变量,但这是一个混乱的解决方案,我希望有更好的东西我不知道。
注意:我使用的是 G++ 编译器。使用 Intel 语法 Asm 的解决方案会很好,但我会采取任何措施。
我想做的例子(intel语法):
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 :(
}
};
这些都是粗略的例子,但我认为他们明白了重点。
【问题讨论】:
-
您是否尝试过使用代码
var_j = 4;或类似的代码查看 G++ 编译器输出的反汇编? -
使用全局指针不是线程安全的,因为它的值可能在重新分配保存的值之前被覆盖
标签: c++ assembly g++ inline-assembly