如何确定从程序集调用stat结构中的字段偏移量?

时间:2016-09-11 12:45:38

标签: assembly stat

为了获得struct stat描述文件,我将调用* stat系列函数来填充由带有结构值的传递指针所指向的内存。

C 中,我们可以调用 POSIX.1-2008 offsetof宏,但它是一个宏,在程序集中不可用。

如何从装配中确定结构的大小以及如何确定字段的偏移量,以便可以提取必要的字段,如st_sizest_mode等等?

1 个答案:

答案 0 :(得分:1)

平台的ABI确定C struct padding的规则。例如,x86-64 Linux使用the x86-64 System V ABI

艰难的方法:阅读ABI并自己解决。 标记维基中的链接。 (它实际上并不那么难,结构中对齐/填充的规则非常简单:每个成员都按照声明的顺序排列,并且自然对齐。这可能需要填充)。

简单方法:让编译器通过编写存储到结构中的函数来计算偏移量,并查看asm。

e.g。

&

(来自Godbolt compiler explorer