我一直在谷歌上寻找一段时间,但没有取得丰硕成果。我实际上正在寻找一种导出的方法或一些如何得到所有字符串文字的列表,例如。
int main(){
const char *p = "Hello";
const char x[] = "World";
}
编译这段代码有没有办法知道“你好”和“世界”?我知道它们可用于反汇编程序(在Windows中使用)。但是有没有一些适当的工具来实际转储这些字符串或以某种方式导出它们?
答案 0 :(得分:2)
我完全不明白这个问题。你有一个源文件,当你编译它时,你需要GCC告诉你你使用了多少字符串常量。我解释这个是正确的吗?
如果是,您可以告诉gcc使用“gcc -S source_file”进行编译。这将为您提供.s文件,其中包含您已定义的字符串常量,而不是“.string”。您可以解析此文件中的“.string”出现并获取计数(手动或使用“grep”管道传输到“wc -l”)
答案 1 :(得分:1)
如果没有调试信息,您只能知道它们将被简单地插入只读数据区域(可能是.rdata
部分,IIRC)。
linux strings
实用程序将查看二进制文件,并在给定长度和编码约束内转储任何已识别的字符串。
答案 2 :(得分:0)
为什么你需要C代码中的所有字符串文字常量? (在二进制文件上使用strings
实用程序可能就足够了。)
您可以自定义GCC编译器,例如与MELT为此目的,但这可能需要几天时间,我觉得这是一种矫枉过正的行为。
您也可以从GCC发出汇编代码并解析该汇编代码以获取字符串常量。
当然,您可以对预处理的表单进行标记化和解析。
答案 3 :(得分:-1)
编写一个识别字符串和注释的简单标记器,并忽略其他所有内容。