C 指向使用asm的成员的指针
我一直在尝试从c语言中的一行代码转换为汇编语言,但我就是不知道使用asm将指针转换为成员函数的正确方式。 下面是一段代码:C 指向使用asm的成员的指针,c,assembly,C,Assembly,我一直在尝试从c语言中的一行代码转换为汇编语言,但我就是不知道使用asm将指针转换为成员函数的正确方式。 下面是一段代码: struct file{ int size; }FILE; void function(FILE *result){ result -> size; } 假设是x86-64编译器, _功能: ; rdi=指向结构文件的指针 ; rax=尺寸元素 mov-eax,[rdi] “使用asm”的信息量不足以回答这个问题-哪种体系结构?结果->大小当然是(*结果)。大小
struct file{
int size;
}FILE;
void function(FILE *result){
result -> size;
}
假设是x86-64编译器,
_功能:
; rdi=指向结构文件的指针
; rax=尺寸元素
mov-eax,[rdi]
“使用asm”的信息量不足以回答这个问题-哪种体系结构?结果->大小当然是(*结果)。大小
,考虑到size
是第一个成员,这只是*result
,在您使用的任何体系结构中,这都是一个简单的解引用。@Govind Parmar我在编译器输出(例如on)中使用x86Look来查找像int foo(FILE*p){return p->size;}
这样的函数的正确偏移量(和语法)。另外,除非您正在实现stdio,否则不要将文件
用作类型名。除非这是一个将此作为要求或“学习体验”的类项目。通常当人们尝试使用内联asm时,他们希望加快代码的速度。通常,他们最终得到的代码速度较慢,不总是正常工作,或者很难进行故障排除/维护(有时全部3个)。也就是说,有办法找出数据成员的“偏移量”。如何将其与内联asm结合起来取决于您使用的编译器。