我需要在一个Mach-O的二进制转换到一个函数的引用在我自己的dylib定义的自定义功能。 我现在下面的过程,
更换引用旧的功能,新的一个。 例如_fopen
到_mopen
使用SED。
我打开了Mach-O的二进制MachOView找到我想改变实体的地址。 我然后手动更改使用十六进制编辑器在二进制信息。
有没有一种方法,我可以自动执行此过程即编写一个程序来读取符号和动态加载信息,然后改变他们的可执行文件。 我一直在寻找在Mach-O的头文件在/usr/include/mach-o
,但我不能肯定全部如何使用它们来获取这些信息。 不要存在任何图书馆存在 - C或蟒蛇,帮助做?
有趣的问题,我试图做类似的静态库的东西; 看看这有助于
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)。