我实际上正在学习汇编语言(在Linux上工作),我的问题是:我有一个包含如下链表的C头文件
typedef struct s_list
{
void *data;
struct s_list *next;
} t_list;我想要做的是在我的汇编.s文件中通过我想在我的C程序中使用的函数与它交互,例如在我的C程序中:
void *someData = someValue;
t_list *someList = NULL;
someList = listAddBack(somelist, someData);我可以在我的汇编文件中直接包含我的头文件吗?或者我必须在我的汇编文件中声明与struc相同的结构,然后在这里执行我的函数吗?顺便说一下,很抱歉我的英语不好,我不是以英语为母语的人。
发布于 2020-11-05 07:43:52
汇编没有像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 anywhere来写它,这会让你对它在汇编语言中是如何工作的有一个概念。
https://stackoverflow.com/questions/64683132
复制相似问题