首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将节添加到现有(OS )可执行文件中?

如何将节添加到现有(OS )可执行文件中?
EN

Stack Overflow用户
提问于 2010-10-26 09:49:00
回答 2查看 3.5K关注 0票数 5

是否有任何方法将节添加到已经链接的可执行文件中?

我试图对基于苹果指令的OS可执行文件进行代码签名。这包括通过在链接器选项中添加参数来在要签名的二进制文件中创建适当部分的指令:

代码语言:javascript
复制
-sectcreate __TEXT __info_plist Info.plist_path

但是:我试图签名的可执行文件是使用球拍 (一个方案实现)生成的,它通过克隆“真实的”racket可执行文件并直接编辑Mach-O文件,从Mach/real代码中组装一个独立的可执行文件。

所以问题是:我是否可以进一步编辑这个可执行文件,以添加代码签名所需的部分?

如果以明显的方式使用ld,则不起作用:

代码语言:javascript
复制
% ld -arch i386 -sectcreate __TEXT __info_plist ./hello.txt racket-executable
ld: in racket-executable, can't link with a main executable
%

我想这似乎很公平。Libtool没有任何可能的选项,redo_prebinding命令(它至少是编辑可执行文件的命令)也没有。

相关的球拍列表所建议的两种可能性是:(一)扩展球拍汇编工具,以调整在可执行文件上所做的手术(可行,但令人害怕),或者(ii)创建一个自定义的球拍可执行文件,该可执行文件已经具备了所需的部分。这两种方法看起来都像是大锤式的解决方案。macosx-dev列表没有提出任何建议。

EN

回答 2

Stack Overflow用户

发布于 2010-12-10 21:39:20

我认为这是不可行的。

似乎没有编辑Mach-O对象文件(其中包括可执行文件)的股票命令。otool命令允许您查看这样一个文件的结构(使用otool -l),但仅此而已。

Mach-O对象文件的结构被记录为在苹果参考网站上。总之,Mach-O对象文件具有以下结构:

  • 标题,后面跟着
  • 一系列的“加载命令”,后面跟着
  • “段”序列(一些加载命令负责指向文件中段的偏移量)

这些段包含零个或多个“区段”。头命令和加载命令被认为在文件的第一段中,在该段的任何部分之前。文档中记录了几十个加载命令,以及相关头文件中定义的其他命令,因此显然是私有的。

添加一节将意味着更改段的长度。除非该节非常小,否则需要将下面的段进一步推入文件中。这是一个no-no,因为很多load命令引用文件中的数据,从文件开始就带有绝对偏移量(相对于包含它们的段或区段的开头),因此将段重新定位在一个假定的Mach-O编辑器中将涉及修补大量的偏移设置。这看起来不容易。

在网络上有一两个Mach-O文件查看器,但据我所见,没有一个比otool做得更多的文件查看器(这并不特别困难:我今天下午写了其中的大部分内容,同时试图理解格式)。至少有一个Mach-O编辑器,但它似乎没有做lipo没有做的任何事情(称为“moatool”,但源代码似乎已经从谷歌代码中消失了)。

哦,好吧。我想是时候找个B计划了。

票数 3
EN

Stack Overflow用户

发布于 2018-03-28 19:51:09

Gimme调试器工具能够修改现有二进制文件的__info_plist文本部分。请参阅https://reverse.put.as/2013/05/28/gimmedebugah-how-to-embedded-a-info-plist-into-arbitrary-binaries/

它可以在这里获得:https://github.com/gdbinit/gimmedebugah

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4022495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档