运维开发网

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

运维开发网 https://www.qedev.com 2020-06-17 09:35 出处:网络
我需要能够在某个地方调用 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;
}
0

精彩评论

暂无评论...
验证码 换一张
取 消