如何在Mac OS X的可执行文件中嵌入二进制文件的内容?

ne

我的命令行程序的生成过程生成了一个二进制文件(超过500KB),当前必须由argv的路径引用该文件。我想将此文件嵌入可执行文件中。

在Linux上,似乎可以用来objcopy从二进制文件制作目标文件:

objcopy --input binary --output elf32-i386 --binary-architecture i386 myfile.dat myfile.o

但是,OS X开发人员工具链不包含objcopy命令。如果不安装binutils,有什么可能?

我从Xcode构建项目,并使用自定义构建规则生成文件。

ne

正如关于的objcopy另一个问题所证明的那样,将二进制文件包含到可执行文件中的另一种方法是使用.incbin汇编程序指令。该解决方案在以下方面具有两个主要优点objcopy:开发人员可以控制符号名称(objcopy似乎有固定的名称命名方案),并且不需要objcopy

与基于链接器的-sectcreate解决方案相比,该解决方案还具有优势它是跨平台的,访问数据要简单得多。

我正在使用此Xcode构建规则脚本来生成要包含的文件和带有.incbin伪指令的程序集文件

my_generation_tool -o $DERIVED_FILE_DIR/$INPUT_FILE_NAME.out $INPUT_FILE_PATH

export AS_PATH=$DERIVED_FILE_DIR/$INPUT_FILE_NAME.out.s

echo "\t.global _data_start_$INPUT_FILE_BASE" > $AS_PATH
echo "\t.global _data_end_$INPUT_FILE_BASE" >> $AS_PATH
echo "_data_start_ $INPUT_FILE_BASE:" >> $AS_PATH
echo "\t.incbin \"$INPUT_FILE_NAME.out\"" >> $AS_PATH
echo "_data_end_$INPUT_FILE_BASE:" >> $AS_PATH

然后,给定使用此规则处理的文件“ somefile.gen”,程序集将如下所示:

    .global _data_start_somefile
    .global _data_end_somefile
_data_start_somefile:
    .incbin "somefile.gen.out"
_data_end_somefile:

可以使用data_start_somefiledata_end_somefile符号在C中访问数据(macOS链接程序在C名称前加上一个虚假的前缀_,这就是汇编文件中包含它们的原因):

extern char data_start_somefile, data_end_somefile;

for (const char* c = &data_start_somefile; c != &data_end_somefile; ++c)
{
    // do something with character
}

在另一线程上的答案有更多的花哨之处,有些人可能会觉得有用(例如,length符号)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Mac OS X上创建ELF可执行文件?

来自分类Dev

可执行文件与二进制文件..它们如何工作?

来自分类Dev

如何在目录中递归查找所有二进制可执行文件?

来自分类Dev

在Mac上将Python3编译为二进制可执行文件

来自分类Dev

如何在Mac OS X上将文件列表拖放到应用程序二进制文件中?

来自分类Dev

如何将机器代码转换为二进制可执行文件?

来自分类Dev

如何知道我的二进制可执行文件的内存占用量

来自分类Dev

如何将机器代码转换为二进制可执行文件?

来自分类Dev

如何通过指令读取二进制可执行文件?

来自分类Dev

无法在Mac OS上执行二进制文件

来自分类Dev

install_name_tool以更新可执行文件以在Mac OS X中搜索dylib

来自分类Dev

Mac OS X和Windows中的可执行文件

来自分类Dev

如何在Mac OS X 10.8.5上恢复/ usr / libexec / java_home可执行文件?

来自分类Dev

如何强制Eclipse使用SceneBuilder可执行文件?Mac OS X

来自分类Dev

如何恢复正在运行的进程被删除的二进制可执行文件

来自分类Dev

在Mac OS X应用程序捆绑包中打包C二进制文件

来自分类Dev

Mac OS X:如何运行usr / local / bin之外的二进制文件?

来自分类Dev

Clang C ++ Cross Compiler-从Mac OS X生成Windows可执行文件

来自分类Dev

将Unix可执行文件添加到Mac OS X Dock

来自分类Dev

Mac OS二进制文件无法打开文件

来自分类Dev

如何在OS X上编译静态FFmpeg二进制文件

来自分类Dev

如何在OS X上编译静态FFmpeg二进制文件

来自分类Dev

可执行文件(二进制文件)的标准命名惯例,以及如何判断文件是否具有不可打印的字符?

来自分类Dev

如何使用自动工具设置项目,以便生成的可执行文件可以查看所需的二进制文件?

来自分类Dev

如何使用自动工具设置项目,以便生成的可执行文件可以查看所需的二进制文件?

来自分类Dev

如何通过 Python selenium 在多个 Firefox 二进制文件中选择要使用的 Firefox 可执行文件

来自分类Dev

为什么我可以在Mac OS X中查看某些Unix可执行文件,而不能查看其他文件?

来自分类Dev

putStr来自GHC,Mac OS X的编译二进制文件

来自分类Dev

Mac OS X:应存放二进制文件的常规位置

Related 相关文章

  1. 1

    如何在Mac OS X上创建ELF可执行文件?

  2. 2

    可执行文件与二进制文件..它们如何工作?

  3. 3

    如何在目录中递归查找所有二进制可执行文件?

  4. 4

    在Mac上将Python3编译为二进制可执行文件

  5. 5

    如何在Mac OS X上将文件列表拖放到应用程序二进制文件中?

  6. 6

    如何将机器代码转换为二进制可执行文件?

  7. 7

    如何知道我的二进制可执行文件的内存占用量

  8. 8

    如何将机器代码转换为二进制可执行文件?

  9. 9

    如何通过指令读取二进制可执行文件?

  10. 10

    无法在Mac OS上执行二进制文件

  11. 11

    install_name_tool以更新可执行文件以在Mac OS X中搜索dylib

  12. 12

    Mac OS X和Windows中的可执行文件

  13. 13

    如何在Mac OS X 10.8.5上恢复/ usr / libexec / java_home可执行文件?

  14. 14

    如何强制Eclipse使用SceneBuilder可执行文件?Mac OS X

  15. 15

    如何恢复正在运行的进程被删除的二进制可执行文件

  16. 16

    在Mac OS X应用程序捆绑包中打包C二进制文件

  17. 17

    Mac OS X:如何运行usr / local / bin之外的二进制文件?

  18. 18

    Clang C ++ Cross Compiler-从Mac OS X生成Windows可执行文件

  19. 19

    将Unix可执行文件添加到Mac OS X Dock

  20. 20

    Mac OS二进制文件无法打开文件

  21. 21

    如何在OS X上编译静态FFmpeg二进制文件

  22. 22

    如何在OS X上编译静态FFmpeg二进制文件

  23. 23

    可执行文件(二进制文件)的标准命名惯例,以及如何判断文件是否具有不可打印的字符?

  24. 24

    如何使用自动工具设置项目,以便生成的可执行文件可以查看所需的二进制文件?

  25. 25

    如何使用自动工具设置项目,以便生成的可执行文件可以查看所需的二进制文件?

  26. 26

    如何通过 Python selenium 在多个 Firefox 二进制文件中选择要使用的 Firefox 可执行文件

  27. 27

    为什么我可以在Mac OS X中查看某些Unix可执行文件,而不能查看其他文件?

  28. 28

    putStr来自GHC,Mac OS X的编译二进制文件

  29. 29

    Mac OS X:应存放二进制文件的常规位置

热门标签

归档