如何通过静态分析找出二进制文件是否在Linux上使用某些系统调用?

wei*_*wei 3 linux system-calls

我需要找出一个二进制文件是否在Linux上使用epoll或select for socket处理.二进制文件没有被剥离,但我不能在我的linux框中运行它所以没有strace.

Jam*_*arp 10

nm <binary>将告诉您哪些符号已定义,更重要的是,这些符号由给定的二进制文件使用.您可以通过检查输出中列出哪些pollselect列出来获得保守猜测.

您可能会发现您的应用程序与两者相关联.在这种情况下,它可能正在做出运行时决定调用哪一个,如果你运行它,你将无法轻易告诉它实际使用哪一个.

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

如果程序使用共享库,则实际调用pollselect可能在它正在使用的库中.在这种情况下,您可能需要深入nm了解每个库上运行的所有库.您可以ldd通过查找NEEDED输出中的条目来找出程序使用哪些库,或者哪些库不起作用readelf --dynamic.

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