如何通过静态分析确定二进制文件是否在Linux上使用特定的系统调用?
我需要找出二进制文件是否在Linux上使用如何通过静态分析确定二进制文件是否在Linux上使用特定的系统调用?,linux,system-calls,static-analysis,Linux,System Calls,Static Analysis,我需要找出二进制文件是否在Linux上使用epoll或select进行套接字处理。二进制文件没有被剥离,但我无法在我的linux机器中运行它,因此没有stracenm会告诉您定义了哪些符号,更重要的是,在这里,给定的二进制文件使用了哪些符号。通过检查输出中列出的poll或select中的哪一个,您可以得到保守的猜测 您可能会发现您的应用程序是针对这两个链接的。在这种情况下,它可能会在运行时决定调用哪一个,如果您运行它,您将无法轻松判断它将实际使用哪一个 根据二进制文件的构建方式,您可能必须使用-
epoll
或select
进行套接字处理。二进制文件没有被剥离,但我无法在我的linux机器中运行它,因此没有strace
nm
会告诉您定义了哪些符号,更重要的是,在这里,给定的二进制文件使用了哪些符号。通过检查输出中列出的poll
或select
中的哪一个,您可以得到保守的猜测
您可能会发现您的应用程序是针对这两个链接的。在这种情况下,它可能会在运行时决定调用哪一个,如果您运行它,您将无法轻松判断它将实际使用哪一个
根据二进制文件的构建方式,您可能必须使用-D
标志运行nm
;或者,您可能需要确保未指定-D
。两种方法都试
如果程序使用共享库,则对poll
或select
的实际调用可能在其使用的库中。在这种情况下,您可能需要挖掘每个库上运行的nm
。通过在readelf--dynamic
的输出中查找所需的条目,您可以找出程序在ldd
中使用的库,或者如果该库不起作用
如果二进制文件是为不同于您当前运行的平台构建的,那么ldd
将不起作用,而且您可能需要使用binutils
的交叉编译器构建来获得适合您的nm
版本。谢谢您的完整答案,