我需要将mach-o二进制函数的引用更改为我自己的dylib中定义的自定义函数。我现在关注的过程是,
将对旧功能的引用替换为新功能。例如_fopen
到_mopen
使用sed。
我在MachOView中打开mach-o二进制文件,找到我想要更改的实体的地址。然后,我使用十六进制编辑器手动更改二进制文件中的信息。
有没有办法让这个过程自动化,即编写程序来读取符号,动态加载信息然后在可执行文件中更改它们。我正在查看/usr/include/mach-o
处的mach-o头文件,但我不完全确定如何使用它们来获取此信息。存在任何库 - C或python有助于做同样的事情吗?
答案 0 :(得分: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原理相同)。
答案 1 :(得分:2)
有趣的问题,我正在尝试做类似于静态的lib;看看this是否有帮助