如何将link内核函数转为user-space程序?

How to link kernel functions to user-space program?

我有一个用户-space 程序 (Capstone)。我想在 FreeBSD 内核中使用它。我相信它们中的大多数具有相同的函数名称、语义和参数(在 FreeBSD 中,内核 printf 也被命名为 printf)。首先,我将其构建为 libcapstone.a 库,并使用它 link 我的程序。由于包含文件在 Linux user-space 和 FreeBSD 内核之间是不同的,库无法找到像 sprintfmemsetvsnprintf 这样的符号。我怎样才能使这些符号(来自 FreeBSD 内核)对 libcapstone.a 可见?

如果在Linux user-space源代码中直接包含像<sys/systm.h>这样的头文件,即使我添加[=21],错误也会像undefined type u_int or u_char =] 到 CFLAGS.

此外,还有其他更好的方法吗?

您还需要;查看内核手册页,例如 "man 9 printf"。他们在顶部列出了所需的内容。

但是请注意,您正在努力真正做一些事情。一些基本功能(例如 printf)可能在那里;其他的则完全不同(例如 malloc(9)),而且大多数 POSIX API 根本不存在。您将无法使用 open(2)、socket(2) 或 fork(2)。