gpt4 book ai didi

c - 如何将 C 函数公开给自定义虚拟机?

转载 作者:太空狗 更新时间:2023-10-29 17:23:55 25 4
gpt4 key购买 nike

我正在开发一个虚拟机,我希望它能够与 C 接口(interface)。换一种方式,将虚拟机功能暴露给 C 代码是相当容易的,我无法解决的问题是暴露C 函数到虚拟机。

我希望能够像这样向虚拟机动态注册 C 函数:

vm_register(printf);

然后在我的虚拟机中,将参数压入堆栈,然后:

call printf

问题是,在不知道函数需要多少参数以及什么类型的情况下,我不确定是否可以使用函数指针。

在这种情况下是否可以使用通用的函数指针类型?有人可以引导我朝着正确的方向前进吗?

最佳答案

一般的答案是你必须自己使用汇编来实现它。与 libc 链接后,您就有了要调用的函数的地址,您必须手动将参数传递给该函数(使用您的虚拟机运行的任何平台的调用约定)。

幸运的是有一个图书馆,libffi ,这正是你想要的。它也很容易使用,它的源代码包括一些文档和示例。如果您有兴趣了解它是如何工作的,可以查看其代码(例如 calling a function using the unix calling convention )。

关于参数类型,您通常必须让用户为您描述它们,然后盲目接受并将它们进一步传递给 libffi(如果没有 libffi,则传递给硬件)。另一种方法是解析要调用的函数的 C 头文件,这种方法不太容易出错——但无论如何,确实没有安全的方法,因为函数的二进制代码没有描述它的接口(interface)(使用 printf 及其可变参数列表更是如此)。

关于c - 如何将 C 函数公开给自定义虚拟机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7540162/

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