gpt4 book ai didi

c++ - 在内联汇编中访问 C++ 类成员

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:09 24 4
gpt4 key购买 nike

问题:如何从非 POD 类中访问程序集中的成员变量?


阐述:

我已经为类成员函数编写了一些内联汇编代码,但我不知道如何访问类成员变量。我试过 offsetof 宏,但这是一个非 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"
}
};

当前的 hackish 解决方案:

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 都不起作用) .

关于c++ - 在内联汇编中访问 C++ 类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4583288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com