我需要能够在某个地方调用
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; }
精彩评论