我想获得一个使用静态分析的给定二进制文件(x86_64)中使用的系统调用列表。我尝试了strace,但它不能保证它是一个完整的列表,因为在执行期间可能不会调用某些系统调用。
答案 0 :(得分:1)
对于C / C ++,您可以尝试CppDepend来检测外部库和系统调用的所有依赖项。但是,您必须分析源代码而不是二进制文件。
答案 1 :(得分:1)
在静态分析中,假设没有混淆二进制文件,有几种工具可以深入了解二进制文件。最常用的是IDA。在单独分析二进制文件时,有几种编译选项在具有挑战性的静态分析技术中发挥着重要作用,即动态对静态链接,剥离二进制文件,优化选项等。
查找系统调用的一种方法是使用IDAPython API创建脚本,以便根据此处X86 Assembly/Interfacing with Linux和此处Linux Syscall Reference的描述查找系统调用。 IDAPython提供了一个“足够好”的API,可以查看每个基本块中的指令,以得出正在调用什么系统调用的结论。
答案 2 :(得分:0)
使用NDepend工具,您可以使用代码查询,但仅限于.NET程序集:
from x in ThirdParty.CodeElements
select new { x, callers =
x.IsMethod ? x.AsMethod.MethodsCallingMe.Cast<ICodeElement>() :
x.IsType ? x.AsType.TypesUsingMe.Cast<ICodeElement>() : new ICodeElement[0] }
答案 3 :(得分:0)
我认为早期的答案是解决这个问题的最简单方法。一个选项是使用支持二进制文件并导航控制流图的静态分析工具。这可能允许您在死代码中调用它们时排除某些函数,但它也会复杂得多。 GrammaTech CodeSonar是一个支持二进制文件的商业工具,可以在这里提供帮助。