如何在代码中向MachO二进制文件添加空节?

时间:2016-10-13 06:29:35

标签: ios c gcc linker mach-o

似乎在-Wl,-sectcreate,__RESTRICT,__restrict,/dev/null中添加Other Linker Flags会添加一个空白部分。

在代码中我们可以__attribute((used,section("segmentname,sectionname")))声明var或函数。

但是如何在代码中声明一个空部分?

1 个答案:

答案 0 :(得分:0)

您已经发现了section(...)属性,但无论您将其应用于何处(偶数struct {}char[0]),它都会占用一些空间并创建非空段

似乎没有办法完全您从实际C代码中提出的问题,但您可以通过使用内联汇编来实现解决方法。

在函数之外的某处包含此代码块:

asm(".section __RESTRICT,__restrict\n"
    "empty:\n"
    ".no_dead_strip empty\n");

这将:

  • 将真正空的(filesize:0)段/部分添加到目标文件中。
  • 在符号表中添加empty符号,但是:
    • 它将是私人的(即不可链接的)。
    • 只要不以下划线开头,它与其他任何东西发生碰撞的几率几乎为零。
  • 适用于所有i386,x86_64,arm和arm64程序集。