当前位置:  开发笔记 > IOS > 正文

如何将LC_LOAD_DYLIB命令插入Mach-O二进制文件(OSX)

如何解决《如何将LC_LOAD_DYLIB命令插入Mach-O二进制文件(OSX)》经验,为你挑选了1个好方法。

我想用一些代码修补一块废弃软件.

该软件是基于碳的,所以我不能使用InputManager(至少,我认为我不能).我的想法是在mach-o标头中添加一个dylib引用,并在调用初始化例程时启动一个新线程.

我使用hexeditor添加了相应的加载命令(LC_ LOAD_DYLIB),并使用mach-o标头.

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

但是,启动二进制文件会给我以下错误

dyld: bad external relocation length

我可以猜到这意味着我需要修改LC_ SYMTAB或LC_ DYNSYMTAB部分......

有人有主意吗?



1> Jason Coco..:

我不确定您要完成什么,但是最简单的方法可能是在启动后将线程注入到mach任务中。有关执行此操作的大量信息(以及执行此操作的代码),请参见:http : //rentzsch.com/mach_inject/。

您应该注意的一些警告:

    现在已为获得任务的mach端口所需的mach task_for_pid()调用特权,并且需要授权才能进行调用。这样做的原因是不言而喻的,但是如果您打算使用注入的代码发布某些内容,则应该意识到这一点。

    您的代码将在与原始应用程序相同的进程空间中运行,但在单独的线程上运行。因此,您将拥有对该应用程序的完全访问权限,但是,如果该应用程序不是线程感知的,则应非常小心地在所注入代码的外部使用和操作数据。显然,这里所有的多线程问题都会被放大,因为原始代码永远不会意识到您所添加的内容。

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有