【问题标题】:Pointer to member using _asm使用 _asm 指向成员的指针
【发布时间】: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 结合使用取决于您使用的编译器。

标签: c assembly


【解决方案1】:

假设一个 x86-64 编译器, _function: ; rdi = pointer to struct file ; rax = size element mov eax, [rdi]

【讨论】:

    猜你喜欢
    • 2018-03-24
    • 1970-01-01
    • 2013-05-02
    • 2023-03-12
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多