Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
如何通过静态分析确定二进制文件是否在Linux上使用特定的系统调用?_Linux_System Calls_Static Analysis - Fatal编程技术网

如何通过静态分析确定二进制文件是否在Linux上使用特定的系统调用?

如何通过静态分析确定二进制文件是否在Linux上使用特定的系统调用?,linux,system-calls,static-analysis,Linux,System Calls,Static Analysis,我需要找出二进制文件是否在Linux上使用epoll或select进行套接字处理。二进制文件没有被剥离,但我无法在我的linux机器中运行它,因此没有stracenm会告诉您定义了哪些符号,更重要的是,在这里,给定的二进制文件使用了哪些符号。通过检查输出中列出的poll或select中的哪一个,您可以得到保守的猜测 您可能会发现您的应用程序是针对这两个链接的。在这种情况下,它可能会在运行时决定调用哪一个,如果您运行它,您将无法轻松判断它将实际使用哪一个 根据二进制文件的构建方式,您可能必须使用-

我需要找出二进制文件是否在Linux上使用
epoll
select
进行套接字处理。二进制文件没有被剥离,但我无法在我的linux机器中运行它,因此没有
strace

nm
会告诉您定义了哪些符号,更重要的是,在这里,给定的二进制文件使用了哪些符号。通过检查输出中列出的
poll
select
中的哪一个,您可以得到保守的猜测

您可能会发现您的应用程序是针对这两个链接的。在这种情况下,它可能会在运行时决定调用哪一个,如果您运行它,您将无法轻松判断它将实际使用哪一个

根据二进制文件的构建方式,您可能必须使用
-D
标志运行
nm
;或者,您可能需要确保未指定
-D
。两种方法都试

如果程序使用共享库,则对
poll
select
的实际调用可能在其使用的库中。在这种情况下,您可能需要挖掘每个库上运行的
nm
。通过在
readelf--dynamic
的输出中查找
所需的
条目,您可以找出程序在
ldd
中使用的库,或者如果该库不起作用


如果二进制文件是为不同于您当前运行的平台构建的,那么
ldd
将不起作用,而且您可能需要使用
binutils
的交叉编译器构建来获得适合您的
nm
版本。

谢谢您的完整答案,