Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Indexing 基于ELF文件筛选Opengrok索引_Indexing_Opengrok - Fatal编程技术网

Indexing 基于ELF文件筛选Opengrok索引

Indexing 基于ELF文件筛选Opengrok索引,indexing,opengrok,Indexing,Opengrok,我有一个基于linux的嵌入式应用程序的项目。这里我有一个ELF文件,我想确保OpenGrok索引只使用ELF文件中的符号,不包括项目文件中所有不相关/未编译的部分。使用OpenGrok索引可以做到这一点吗?如果是,生成此索引的命令是什么。目前,我使用下面的命令为整个源代码生成索引。。 java -Djava.util.logging.config.file=/opengrok/etc/logging.properties -jar/opengrok/dist/lib/opengrok.jar

我有一个基于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/ctags
-s/opengrok/src-d/opengrok/data-H-P-s-G

-W/opengrok/etc/configuration.xml-Uhttp://localhost:8080/source

如果您希望只包含/忽略特定文件(在本例中为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.

我不清楚项目文件的非相关/非编译部分或非链接/编译符号的确切含义,因此我将描述ELF文件分析在OpenGrok中的工作方式,您可以决定它是否适用于您的用例,或者是否需要提交新问题

ELF分析仪经过以下ELF部分:

  • .debug\u str
  • .comment
  • .data
  • .data1
  • .rodata
  • .rodata1
加上
sh_类型
等于
SHT_strab
的所有部分。后者包含由空字节分隔的字符串。分析器从这些部分的内容中提取所有可打印字符串(使用不可打印字符作为分隔符),并将其与空格字符连接。因此,来自所有这些部分的所有可打印字符串都被累积到单个字符串中,并通过插入的空格有效地进行标记。这些标记随后存储在索引中,因此可以进行搜索

使用这种方法,索引将不仅包含程序内定义的符号,还包含从程序引用的外部符号的名称(例如从动态库调用的函数),以及一些全局变量的内容(如果它们包含可打印字符串)

此外,当删除ELF二进制文件时,
.symtab
部分将被删除,程序中定义的符号名称将丢失给索引器


现在,可以以更智能的方式遍历ELF部分,并排除外部引用(例如,对动态库函数的调用),但是这会阻碍最初的想法,即有一种方法来执行安全漏洞分析-如果知道哪个函数有问题,可以搜索调用该函数的所有二进制文件,因此对安全影响有一定的了解。或者,可以将提取的标记拆分为引用和定义。

您能否澄清当前索引命令的问题?我只想交叉引用链接的符号和最终可执行ELF的一部分。基本上,这将排除由于内核/平台配置未启用不同宏而未包含的所有C代码行。我只在链接符号上搜索符号,即编译和链接符号。现在似乎是全文搜索符号是否链接。目的不是忽略ELF文件,而是使用可执行文件/ELF文件仅过滤链接的符号并忽略所有其他未链接/编译的符号。。目前,opengrok中的符号搜索会列出符号,甚至是未编译/链接的信息。如果ELF analyzer仅用于过滤已编译的函数/变量/对象,那么如果我浏览项目中的源文件,我还会在搜索交叉引用时看到ELF中未编译的符号/函数。是否有任何符号/机制将这些未编译的符号分隔在列表中..如上所述,目前来自相关部分的所有字符串都集中在索引中的公共字段中,因此无法区分它们。还陈述了增强的想法。然而,据我所知,这只适用于未压缩的二进制文件。