【发布时间】:2016-11-14 00:15:36
【问题描述】:
我一直在尝试从 c 中的一行代码转换为汇编,但我无法弄清楚使用 asm 对指向成员函数的正确转换是什么。 下面是一段代码:
struct file{
int size;
}FILE;
void function(FILE *result){
result -> size;
}
【问题讨论】:
-
“使用 asm”不足以回答这个问题 - 哪种架构?
-
result->size当然是(*result).size,因为size是第一个成员,所以*result在你使用的任何架构中都是一个简单的解引用。 -
@Govind Parmar 我正在使用 x86
-
查看编译器输出(例如在 gcc.godbolt.org 上),以查找像
int foo(FILE *p) { return p->size; }这样的函数以找到正确的偏移量(和语法)。此外,除非您正在实现 stdio,否则不要使用FILE作为类型名称。 -
可能有人应该提到使用内联 asm 通常是 bad idea。除非这是一个将其作为要求或“学习经验”的课堂项目。通常当人们尝试使用内联汇编时,他们希望加快代码速度。通常他们最终得到的是更慢的代码,并不总是能正常工作,或者难以排除故障/维护(有时是全部 3 个)。也就是说,有一些方法可以找出“offsetof”数据成员。如何将它与内联 asm 结合使用取决于您使用的编译器。