linux-kernel – 在Linux内核中从entry_32.S调用C函数

linux-kernel – 在Linux内核中从entry_32.S调用C函数,第1张

概述我需要能够在某个地方调用 linux内核中定义的自定义函数.创建一些函数到底需要做什么: void custom_function(int arg); 其中arg是系统调用号,然后在entry_32.S中的某个位置可以执行: 调用custom_function 由于汇编函数和C函数的堆栈处理不同. 汇编代码“callq”不能直接调用C例程,在调用之前需要一段代码将汇编参数放入C堆栈. Linux内 我需要能够在某个地方调用 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;}
总结

以上是内存溢出为你收集整理的linux-kernel – 在Linux内核中从entry_32.S调用C函数全部内容,希望文章能够帮你解决linux-kernel – 在Linux内核中从entry_32.S调用C函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1019605.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存