PIN插装~linux下无法识别程序内部定义例程解决方法

经过几天的coding和阅读PIN相关API,发现,PIN的开发人员也意识到,在linux下由于没有符号表,PIN很难识别一些程序内部定义的例程,这些例程的名字通常为:sub_例程起始地址。因此,需要自己去解决这些未被识别的例程

方法一:

PIN提供了一个创建例程的API:RTN_CreateAt(ADDRINT addr,string name)。在PIN识别程序内部自定义例程失败的时候,用户可自己通过上述API来创建此例程,并告诉PIN该例程的起始地址 addr,以及例程的名字 name(”sub_addr“形式的字符串)。

但是如何判断PIN识别内部定义例程失败的情况呢?

通过IDA对许多程序.text段的例程进行了分析,一般来说,例程按地址增长顺序排列,并且,两个例程之间会有一个字节不详的对齐处理,但是不超过16字节。而纵观许多程序的例程,起始地址99%都是16字节对齐的(当然,也有个别几个例程个性张扬,起始地址不是16字节对齐)。
方法二(最优):
    自主遍历,不借助PIN的识别RTN的API。通过每一代码段的起始地址,去内存取15字节数据并判断有效指令的size。并计算下次读内存的地址addr+=size.如此不断读内存代码段指令数据一直到代码段的尾部。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值