如何将标记插入到 C 代码中,以便它出现在 .elf 文件中?

How to insert marker into c code so that it appear in .elf file?

我想检查 .elf 文件是从特定代码还是从其他代码构建的

有没有办法在 C 上写一些东西,以便通过查看二进制 elf 文件来识别它?

好吧,我想您可以在代码中插入一个文字字符串。如果您实际上不使用此字符串,编译器可能会决定在优化期间将其删除,因此也许您可以尝试这样的操作:

#include <stdio.h>
int main(int argc, char *argv[]) {
  char *id_string = "MARKER";
  if (argc < 0) {  // (never true)
    puts(id_string);
  }
  return 0;
}

找到适合我的解决方案:

static const char MARKER[] __attribute__((used)) = "A_A_A_A";

您可以使用db(或.byte)声明。

__asm {
    db 0x00 0x01 0x02
}

不要忘记跳过这段代码。

为什么要把事情复杂化?将东西插入 ELF 二进制文件的方法是通过声明全局变量和非静态函数。无需使用字符串和其他类似工具不可靠地挖掘二进制文件,也无需挖掘可能由某些东西意外生成的幻数。

int this_is_my_marker;

符号table中会出现一个名为this_is_my_marker的符号。

这当然假设您使用的是一个相对健全的系统,该系统具有动态库和 unixy 语义(ELF 几乎暗示了这一点)。默认情况下所有全局 variables/functions 最终都在符号 table 中的原因是动态库从主程序解析符号是合法的。由于这几乎已经完成了,所以有人会在没有这样做的情况下发明一个 unixy 操作系统的风险很小。 (这也是 gcc 有那些奇怪的 -fvisibility 标志的原因)