Macos 如何将LC_LOAD_DYLIB命令插入Mach-O二进制文件(OSX)
我想用一些代码修补一个废弃软件 该软件是基于碳的,所以我不能使用InputManager(至少,我认为我不能)。我的想法是向mach-o头添加一个dylib引用,并在调用初始化例程时启动一个新线程 我用一个hexeditor修改了mach-o头,添加了适当的加载命令(LC_;load_DYLIB) otool报告了我希望看到的内容,因此我非常确信该文件的格式正确 Load command 63 cmd LC_LOAD_DYLIB cmdsize 60 name @executable_path/libAltInput.dylib (offset 24) time stamp 1183743291 Fri Jul 6 19:34:51 2007 current version 0.0.0 compatibility version 0.0.0 加载命令63 cmd LC_LOAD_DYLIB cmdsize 60 name@executable_path/libAltInput.dylib(偏移量24) 时间戳1183743291 2007年7月6日星期五19:34:51 当前版本0.0.0 兼容性版本0.0.0 但是,启动二进制文件会导致以下错误 dyld: bad external relocation length dyld:外部重新定位长度错误 我只能猜测这意味着我需要修改LC_uSYMTAB或LC_YNsyMTAB部分Macos 如何将LC_LOAD_DYLIB命令插入Mach-O二进制文件(OSX),macos,dylib,mach-o,dyld,otool,Macos,Dylib,Mach O,Dyld,Otool,我想用一些代码修补一个废弃软件 该软件是基于碳的,所以我不能使用InputManager(至少,我认为我不能)。我的想法是向mach-o头添加一个dylib引用,并在调用初始化例程时启动一个新线程 我用一个hexeditor修改了mach-o头,添加了适当的加载命令(LC_;load_DYLIB) otool报告了我希望看到的内容,因此我非常确信该文件的格式正确 Load command 63 cmd LC_LOAD_DYLIB cmdsize 60
有人有什么想法吗?我不完全确定您想要完成什么,但最简单的方法可能是在mach任务启动后向其注入线程。有关执行此操作(以及运行执行此操作的代码)的大量信息源可在此处找到: 您应该注意的一些注意事项:
不需要修补二进制文件的最简单的解决方案是简单地使用DYLD_INSERT_LIBRARIES环境变量,然后运行应用程序
set DYLD_INSERT_LIBRARIES to /my/path/libAltInput.dylib
我假设动态链接器报告错误的原因是Mach-O文件格式中的许多字段包含指定为文件开头偏移量的地址,因此添加另一个load命令将使每个地址无效。例如,请参见。中的
symoff
和stroff
条目。这是一个很好的建议。回答你,不,我不是在分发应用程序。我正在修补它以供我个人使用,这样我就可以使用备用的HID(我几乎对应用程序的发行商和HID的驱动程序制造商都放弃了希望)。是的,我刚刚读了你的另一个问题。。。mach_Injection可能是您最好、最简单的赌注。