我需要能够在某个地方调用 linux 内核中定义的自定义函数。究竟需要做什么来创建一些功能:
void custom_function(int arg);
系统调用号在哪里arg
,然后在某处entry_32.S
能够做到:
称呼custom_function
我需要能够在某个地方调用 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;
}