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;}总结
以上是内存溢出为你收集整理的linux-kernel – 在Linux内核中从entry_32.S调用C函数全部内容,希望文章能够帮你解决linux-kernel – 在Linux内核中从entry_32.S调用C函数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)