问题:如何从非 POD 类中访问程序集中的成员变量?
详细说明:
我已经为类成员函数编写了一些内联汇编代码,但令我困惑的是如何访问类成员变量。我已经尝试过offsetof宏,但这是一个非 POD 类。
我当前使用的解决方案是将全局范围的指针分配给成员变量,但这是一个混乱的解决方案,我希望有更好的东西我不知道。
note:我正在使用 G++ 编译器。使用英特尔语法 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 :(
}
};
这些都是粗略的例子,但我认为它们表达了要点。
这就是您所需要的:
__asm__ __volatile__ ("movl $4,%[v]" : [v] "+m" (var_j)) ;
编辑添加:汇编器确实接受 Intel 语法,但编译器不知道它,因此这个技巧在使用 Intel 语法时不起作用(无论如何,不适用于 g++ 4.4.0)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)