5

我正在构建一个编译器和一个虚拟机来执行我的字节码。该语言允许绑定外部 C 函数,这些函数可以在一些外部共享对象中定义,以及主编译器/VM 二进制文件(一些基本语言内置)。

我知道我可以使用 dlopen(NULL, ...) 在主可执行文件中动态绑定符号,但是在我strip在二进制文件上运行之后不能。那么我有以下问题:

  1. 有没有办法在剥离的二进制文件上做到这一点?
  2. 一般而言,此功能在 UNIX 系统中的可移植性如何?
  3. 是否有可能以某种方式在 Windows 上做同样的把戏?
  4. 在主可执行文件中动态绑定的任何替代方法?
4

1 回答 1

6
  1. strip -d改为仅去除调试符号。

  2. dlopen(3)手册页说:

    CONFORMING TO
           POSIX.1-2001 describes dlclose(), dlerror(), dlopen(), and dlsym().
    

    因此,跨 *nix 非常便携。

  3. Windows 使用LoadLibrary()andGetProcAddress()代替。

  4. 不。

于 2010-11-15T11:51:49.217 回答