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