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

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

解决方法:

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

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

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

如果程序使用共享库,则对poll或select的实际调用可能在它正在使用的库中.在这种情况下,您可能需要深入研究每个库上运行nm的库.通过在readelf –dynamic的输出中查找NEEDED条目,您可以找到程序与ldd一起使用的库,或者如果它不起作用.

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

标签:linux,system-calls

来源: https://codeday.me/bug/20190718/1494408.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值