gpt4 book ai didi

linux-kernel - 在 Linux Kernel 中从 entry_32.S 调用 C 函数

转载 作者:行者123 更新时间:2023-12-04 04:09:59 28 4
gpt4 key购买 nike

我需要能够调用在 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 Kernel 中从 entry_32.S 调用 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13610345/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com