Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 指向使用asm的成员的指针_C_Assembly - Fatal编程技术网

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”的信息量不足以回答这个问题-哪种体系结构?结果->大小当然是(*结果)。大小

我一直在尝试从c语言中的一行代码转换为汇编语言,但我就是不知道使用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结合起来取决于您使用的编译器。