linux-kernel – 在Linux内核中从entry_32.S调用C函数
发布时间:2020-12-13 23:23:37 所属栏目:Linux 来源:网络整理
导读:我需要能够在某个地方调用 linux内核中定义的自定义函数.创建一些函数到底需要做什么: void custom_function(int arg); 其中arg是系统调用号,然后在entry_32.S中的某个位置可以执行: 调用custom_function 解决方法 由于汇编函数和C函数的堆栈处理不同. 汇
我需要能够在某个地方调用
linux内核中定义的自定义函数.创建一些函数到底需要做什么:
void custom_function(int arg); 其中arg是系统调用号,然后在entry_32.S中的某个位置可以执行: 调用custom_function 解决方法
由于汇编函数和C函数的堆栈处理不同.
汇编代码“callq”不能直接调用C例程,在调用之前需要一段代码将汇编参数放入C堆栈. Linux内核源代码中定义的宏“asmlinkage”用于告诉编译器函数已准备好从程序集调用,编译器将在此C函数的头部添加一些参数放置代码. 所以,你要做的事情是: 在来电方面 movq <arg6>,%r9 /* 6th arg */ movq <arg5>,%r8 /* 5th arg */ movq <arg4>,%rcx /* 4th arg */ movq <arg3>,%rdx /* 3rd arg */ movq <arg2>,%rsi /* 2nd arg */ movq <arg1>,%rdi /* 1st arg*/ callq <your-function-name> movq %rax,<buf-to-return-result> /* return value */ 在被叫方: asmlinkage int my-function(int arg1,int arg2,int arg3,...) { <your code>; return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |