为了获得struct stat
描述文件,我将调用* stat系列函数来填充由带有结构值的传递指针所指向的内存。
在 C 中,我们可以调用 POSIX.1-2008 offsetof宏,但它是一个宏,在程序集中不可用。
如何从装配中确定结构的大小以及如何确定字段的偏移量,以便可以提取必要的字段,如st_size
,st_mode
等等?
答案 0 :(得分:1)
平台的ABI确定C struct padding的规则。例如,x86-64 Linux使用the x86-64 System V ABI。
艰难的方法:阅读ABI并自己解决。 x86标记维基中的链接。 (它实际上并不那么难,结构中对齐/填充的规则非常简单:每个成员都按照声明的顺序排列,并且自然对齐。这可能需要填充)。
简单方法:让编译器通过编写存储到结构中的函数来计算偏移量,并查看asm。
e.g。
&