在马赫 - 邻二进制改变功能参考(Changing function reference in Ma

2019-09-23 02:04发布

我需要在一个Mach-O的二进制转换到一个函数的引用在我自己的dylib定义的自定义功能。 我现在下面的过程,

  1. 更换引用旧的功能,新的一个。 例如_fopen_mopen使用SED。

  2. 我打开了Mach-O的二进制MachOView找到我想改变实体的地址。 我然后手动更改使用十六进制编辑器在二进制信息。

有没有一种方法,我可以自动执行此过程即编写一个程序来读取符号和动态加载信息,然后改变他们的可执行文件。 我一直在寻找在Mach-O的头文件在/usr/include/mach-o ,但我不能肯定全部如何使用它们来获取这些信息。 不要存在任何图书馆存在 - C或蟒蛇,帮助做?

Answer 1:

有趣的问题,我试图做类似的静态库的东西; 看看这有助于



Answer 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)。



文章来源: Changing function reference in Mach-o binary