将GO语言源代码编译到二进制文件中后,源代码存储中的字符串在哪里?如何组织?
以下GO语言源代码是一个示例:
尽管它只是打印一个字符串“ Hello,World!”,但生成的二进制文件中的字符串非常多:
GO语言二进制文件中存储的字符串在哪里?实际上,存储位置的ELF格式原理在.rodata部分(如上图所示)。
一些学生会以C语言编译的ELF格式询问字符串。GO语言的字符串组织方法与C语言的字符串组织方法有什么区别?最大的区别是C语言字符串以“ x00”结尾,因此可以轻松地通过'x00轻松切割不同的字符串',GO语言字符串可以发现没有'x00'结束,没有'x00'的结尾,没有'x00'结束,没有'x00'结束。例如,在上图中,”你好世界!”在以下是“ sigkill:”“”,没有'x00'分离。
GO语言字符串是根据以下方法组织的:
此外,GO语言字符串通常是从GO_STRING位置存储的,如下图所示
有两种方法可以在相反的方向上正确切割GO语言字符串:
基于GO语言弦组织的原理快速切割算法:
1.搜索并确定GO_STRING的起始位置
2.将字符串搜索开始长度设置为1
3.根据当前的字符串长度切割字符串
4.预切下一个字符串并与当前字符串进行比较,以检查是否违反了原理。如果它符合当前字符串的保存,请继续在步骤3中切下下一个字符串,否则意味着字符串在步骤5操作中更改。
5.将当前的字符串长度添加到1,然后在步骤3中继续搜索,直到整个搜索正确
如下图所示(长度为13个字节的字符串):
[摘要] GO语言字符串的切割可以引用二进制安全检测中字符串的信息,以实现实际代码中字符串的信息,以提高检测的准确性。
作者:安全技术猿。