我想检查.elf文件是否是根据特定代码或其他代码构建的
有没有办法在C上写一些东西,以便通过查看二进制精灵文件来识别它?
答案 0 :(得分:4)
好吧,我想你可以在代码中插入一个文字字符串。如果你实际上没有使用这个字符串,编译器可能决定在优化期间删除它,所以也许你可以尝试这样的事情:
#include <stdio.h>
int main(int argc, char *argv[]) {
char *id_string = "MARKER";
if (argc < 0) { // (never true)
puts(id_string);
}
return 0;
}
答案 1 :(得分:2)
为什么复杂化?将内容插入ELF二进制文件的方法是通过声明全局变量和非静态函数。不需要用字符串和其他类似工具来挖掘二进制文件,或挖掘可能由某些东西意外产生的幻数。
int this_is_my_marker;
符号表中会出现一个名为this_is_my_marker
的符号。
这当然假设你是一个相对理智的系统,它具有动态库和unixy语义(ELF几乎暗示了这一点)。默认情况下,所有全局变量/函数最终都出现在符号表中的原因是因为动态库从主程序中解析符号是合法的。由于这种情况几乎已经完成,因此有人会发明一个没有完成操作的unixy操作系统。 (这也是为什么gcc有那些奇怪的-fvisibility
标志)
答案 2 :(得分:1)
找到适合我的解决方案:
static const char MARKER[] __attribute__((used)) = "A_A_A_A";
答案 3 :(得分:1)
您可以使用.byte
(或__asm {
db 0x00 0x01 0x02
}
)声明。
<script src="<?=Yii::app()->theme->baseUrl; ?>/js/bootstrap.min.js"></script>
不要忘记跳过这段代码。