Linux kernel 在Linux内核中从条目_32.S调用C函数
我需要能够在某个地方调用linux内核中定义的自定义函数。创建某些功能需要做什么:Linux kernel 在Linux内核中从条目_32.S调用C函数,linux-kernel,kernel,system-calls,Linux Kernel,Kernel,System Calls,我需要能够在某个地方调用linux内核中定义的自定义函数。创建某些功能需要做什么: void自定义函数(int arg) 其中arg是系统呼叫号码,然后在entry_32.S中的某处可以执行以下操作: 调用自定义_函数,因为汇编函数和C函数的堆栈处理不同。 汇编代码“callq”不能直接调用C例程,调用前需要一段代码将汇编参数放入C堆栈中。 Linux内核源代码中定义的宏“asmlinkage”用于告诉编译器该函数已准备好从程序集调用,编译器将在该C函数的开头添加一些参数放置代码 因此,你必须做
void自定义函数(int arg)代码>
其中arg
是系统呼叫号码,然后在entry_32.S
中的某处可以执行以下操作:
调用自定义_函数
,因为汇编函数和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 */
movq,%r9/*6th arg*/
movq,%r8/*第五个参数*/
movq,%rcx/*第四个参数*/
movq,%rdx/*第三个参数*/
movq,%rsi/*第二个参数*/
movq,%rdi/*第一个参数*/
callq
movq%rax,/*返回值*/
在被叫方:
asmlinkage int my-function(int arg1, int arg2, int arg3, ...) {
<your code>;
return 0;
}
ASMINT我的函数(int arg1、int arg2、int arg3,…){
;
返回0;
}