0

我需要将 mach-o 二进制文件中的函数引用更改为我自己的 dylib 中定义的自定义函数。我现在遵循的过程是,

  1. 将对旧函数的引用替换为新函数。例如_fopen使用_mopensed。

  2. 我在MachOView中打开 mach-o 二进制文件以查找我想要更改的实体的地址。然后我使用十六进制编辑器手动更改二进制文件中的信息。

有没有一种方法可以使这个过程自动化,即编写一个程序来读取符号和动态加载信息,然后在可执行文件中更改它们。我正在查看 mach-o 头文件,/usr/include/mach-o但不完全确定如何使用它们来获取此信息。是否存在任何库 - C 或 python 可以帮助做同样的事情?

4

2 回答 2

2

varrunr - 使用 DYLD 的插入,您可以轻松实现大部分(如果不是全部)功能。您创建自己的库,并声明您的插入函数,就像这样

// This is the expected interpose structure
typedef struct interpose_s {
    void *new_func;
    void *orig_func;
} interpose_t;

static const interpose_t interposing_functions[] \
    __attribute__ ((section("__DATA, __interpose"))) = {
        { (void *)my_open,  (void *) open  }
    };

..你只需实现你的开放。在插入函数中,所有对原始函数的引用都将起作用——这使得它成为包装器的理想选择。而且,您可以使用 DYLD_INSERT_LIBRARIES 强行插入您的 dylib(与 Linux 上的 LD_PRELOAD 原理相同)。

于 2012-09-27T00:11:22.963 回答
2

有趣的问题,我正在尝试做一些类似于静态库的事情;看看是否有帮助

于 2012-10-27T19:41:49.840 回答