我需要查看二进制文件是否在Linux上使用epoll或select for socket处理。二进制文件没有被剥离,但是我无法在我的linux框中运行它所以没有strace。
答案 0 :(得分:10)
nm <binary>
将告诉您哪些符号已定义,更重要的是,这些符号由给定的二进制文件使用。您可以通过检查输出中列出poll
或select
中的哪一个来获得保守猜测。
您可能会发现您的应用程序与两者相关联。在这种情况下,它可能正在做出运行时决定调用哪一个,如果你运行它,你将无法轻易告诉它实际使用哪一个。
根据二进制文件的构建方式,您可能必须使用nm
标志运行-D
;或者您可能需要确保不指定-D
。尝试两种方式。
如果程序使用共享库,则对poll
或select
的实际调用可能位于其正在使用的库中。在这种情况下,您可能需要浏览每个库中运行nm
的所有库。通过在ldd
的输出中查找NEEDED
条目,您可以找到程序与readelf --dynamic
一起使用的库,或者如果这不起作用。
如果二进制文件是为不同于当前运行的平台构建的,那么ldd
将不起作用,而且您可能必须使用binutils
的交叉编译器版本来获得适合您的nm
版本。