在汇编文件中使用C标头中的数据结构

Fayeure

我实际上正在学习汇编语言(在Linux上工作),我的问题是:我有一个C头,其中包含这样的链接列表

typedef struct s_list
{
  void *data;
  struct s_list *next;
} t_list;

我想做的就是在我的Assembly .s文件中与它进行交互,并使用我想在C程序中使用的功能,例如在C程序中:

void *someData = someValue;
t_list *someList = NULL;
someList = listAddBack(somelist, someData);

我可以直接将头文件包含在汇编文件中还是必须在汇编文件中声明相同的结构,struc然后从此处执行函数?对不起,我英语不是我的母语,所以英语不好。

Faissaloo

汇编没有类似的约定struct,要使用C中的结构,您必须首先知道C程序如何在内存中布局结构,由于结构的重新排序,实现之间甚至编译之间的结构可能会千差万别。您将必须在Assembly中手动构造和读取结构。

但是,如果您只想使用示例中列出的结构,那么您会很幸运,因为C标准指示结构的第一项始终是内存中的第一项,并且由于该结构中只有两项,因此您可以确定下一个项目在哪里。

假设我们正在x86上工作,那是指edi向您的指针s_list

mov eax, DWORD [edi] ; eax now holds the data pointer
mov ebx, DWORD [edi + 4] ; 4 bytes is the size of a dword, which in turn is the size of all pointer types in x86, so if we look 4 bytes beyond the pointer to the `s_list` we will find the value for the pointer to next

如果您想以另一种方式思考此问题,请尝试查看用C语言编写的代码,然后在不使用struct任何地方的情况下编写它,这将使您了解它在Assembly中的工作方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章