dsu之三

本文是看了德国佬的文章后做了实验后作出的一个副产品。

 

确定函数的调用依赖关系和数据引用的依赖关系,据说可以很简单的——如果用gcc编译器——只要改一个编译开关,不过对于diab编译器来说就有点麻烦,没有这么直接的办法。

我做了两个方案,若f调用或引用g,g是函数或变量

1、已知f求g;

2、已知g求f;

从两个方向解决这个问题。

1、已知f求g

a)打开-x129开关,为每个函数生成一个.txt分割段;

b)查符号表中Name=f的st_shndx,let it be x;

c)查段头表Inf=x的名字,let it be z;

d)在名字为z的重定位表中查Sym.Num,let it be M;

e)在符号表中查M的所有元素,则f依赖M中所有元素。

f)若M中元素有函数,则根据Num,在段头表的Inf中找到offset或者名字,就找到了函数的偏移;

若M中元素有变量,则根据Value值大小关系把变量排序,根据size就可以在.data段中找到他们的值。

2、已知g求f

a)打开-x129开关,为每个函数生成一个.txt分割段;

b)查重定位表Sym.Name=g的重定位分割段.rela.split.*的偏移x;

c)查段头表偏移=x的Inf(sh_info),let it be y;

d)查符号表中st_shndx符号所在段为y的st_name,let it be f;

则知f调用了g。

ps,

l.s.跟我说了怎么处理prolog和epilog,简直醍醐灌顶,我都有点纳闷自己怎么就没想到根本就不用处理NOP的,我只要找到函数入口向前数几个字节,jmp到我的代码处理完后再jmp回来就OK了;相似的,退出函数前的处理可以用点99年的技巧。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值