我有基于linux的嵌入式应用程序的项目。这里我有一个ELF文件,我想确保OpenGrok只使用ELF文件中的符号进行索引,排除项目文件中所有不相关的/未编译的部分。这可以通过OpenGrok索引来实现吗?如果是这样,那么生成此索引的命令是什么。目前,我使用下面的命令为整个源代码生成索引。java
-Djava.util.logging.config.file=/opengrok/etc/logging.properties
-jar /opengrok/dist/lib/opengrok.jar
-c /usr/local/bin/ctag
-s /opengrok/src -d /opengrok/data -H -P -S -G
-W /opengrok/etc/配置.xml -U http://localhost:8080/source
发布于 2021-04-26 09:51:11
如果您希望仅包含/忽略特定文件(在本例中为ELF)。您可以使用以下选项:
-I (--include) - Only files matching this pattern will be examined. Pattern supports wildcards (example: -I '*.java' -I '*.c'). Option may be repeated.
-i (--ignore) - Ignore matching files (prefixed with 'f:' or no prefix) or directories (prefixed with 'd:'). Pattern supports wildcards (example: -i '*.so' -i d:'test*'). Option may be repeated.发布于 2021-05-14 03:50:22
我不清楚项目文件的非相关/非编译部分或非链接/编译符号到底是什么意思,所以我将描述OpenGrok中的ELF文件分析是如何工作的,您可以决定这是否适用于您的用例,或者是否需要提交新的问题。
ELF分析器会经历以下ELF部分:
.debug_str.comment.data.data1.rodata.rodata1加上sh_type等于SHT_STRTAB的所有节。后者包含由空字节分隔的字符串。分析器从这些部分的内容中提取所有可打印字符串(使用不可打印字符作为分隔符),并将它们与空格字符连接起来。因此,所有这些部分中的所有可打印字符串都累积为单个字符串,有效地由插入的空格表示。然后,这些令牌被存储在索引中,因此成为可搜索的。
使用这种方法,索引将不仅包含程序中定义的符号,还包含从程序引用的外部符号的名称(例如从动态库调用的函数),以及一些全局变量的内容(如果它们包含可打印的字符串)。
此外,当ELF二进制文件被剥离时,.symtab部分将被删除,程序中定义的符号名称将丢失给索引器。
现在,可以以更智能的方式遍历ELF部分,并排除外部引用(例如,对动态库函数的调用),但是这会阻碍最初的想法,即有一种方法来执行安全漏洞分析-如果知道哪个函数有问题,就可以搜索调用该函数的所有二进制文件,从而对安全影响有一些了解。或者,提取的标记可以被拆分成引用和定义。
https://stackoverflow.com/questions/67148177
复制相似问题