将功能插入二进制应用程序(3d 方,封闭源代码)的最佳方式是什么。
目标应用程序在 OSX 上,似乎是使用 gcc 3+ 编译的。我可以看到在二进制文件中实现的函数列表,并且已经调试和隔离了一个我想远程调用的特定函数。
zoomByFactor(x,y)
具体来说,当我从复杂的 HIDevice 接收到某些数据时,我想调用这个函数——我们称之为 void 。
我可以轻松地修改或将指令注入二进制文件本身(即修补不需要只在 RAM 中进行)。
你会推荐什么作为“很好”这样做的方式?
编辑:
我确实需要整个应用程序。所以我不能放弃它并使用图书馆。(对于那些需要道德解释的人:这是一个专有的 CAD 软件,其公司网站自 2006 年以来就没有更新过。我已经为这个产品付了钱(真的花了很多钱)并且有项目我无法轻易从中迁移的数据。该产品非常适合我,但我想使用我最近获得的新 HID。我已经检查了应用程序的内部结构,我相当有信心我可以使用相关数据调用正确的函数并使其正常工作)。
到目前为止,这是我所做的,而且非常贫民窟。
我已经通过这个过程修改了部分应用程序:
xxd -g 0 二进制 > binary.hex cat 二进制.hex | awk '替代工作' > modified.hex xxd -r modified.hex > newbinary chmod 777 新二进制
我正在做这种跳跃,因为二进制文件几乎有 100 兆大。
我在想的主要是我会在主应用程序循环中的某个地方跳转,启动一个线程,然后返回到主函数。
现在,问题是:我可以在哪里插入新代码?我需要修改符号表吗?或者,我怎样才能使 dylib 自动加载,以便我需要做的唯一“黑客”操作就是将对正常加载的 dylib 的调用插入到主函数中?