检查函数用的栈空间

  cost down继续中,为了减少栈的空间(34k->20K),浏览代码中用了很大的栈空间的函数。挑出这些函数,并进行研究之。

 

  MIP16有个特点,在进入函数后,用save指令将一些寄存器压栈,同时为local变量留出足够的栈空间。所以,检索save的大小就可以了。

 

反汇编代码如下:

  68342 801013d0 <avl_frontend_initialize>:
  68343 801013d0:       64f4            save    32,ra,s0-s1
  68361 801013fa:       8bec            lh      a3,24(v1)
  68362
  68363 801013fc <avl_frontend_open>:
  68364 801013fc:       64e4            save    32,ra,s0

这里,save后可能有的会用如下的情况,

801027b0 <A1108_IBase_Initialize>:
  70529 801027b0:       f018 64f7       save    a0-a1,184,ra,s0-s1
  70530 801027b4:       b596            lw      a1,80102a0c <A1108_IBase_Initialize+0x25c>

同事说有一个c代码,专用来做类似的工作的框架程序。

 

想想,这样的事情,适合用正则表达式来表示,所以,就打算用grep写。想了一会儿,思路受阻,关键问题:grep是基于行的查找工具,sed也不行,不善于做这个。

最后,还是用了python. 好久不用,生疏了。还好之前做了一些笔记,翻了一下。写了几句代码,就搞定了。python这方面就是强。

 

如下:

      1 #!/usr/bin/python
      2 # Filename: test.py
      3
      4 import os
      6 import re
      7
      8 string_file = open('flash.dasm')
      9 string = string_file.read()
     10 #print string
     11
     12 p = re.compile(r'<(?P<func>.*)>:/s*/n.*save/s*([/w-]+,|)(?P<size>/d+),')
     13
     14 dest_file = open('func_size.csv','w')
     15
     16 for i in p.finditer(string):
     17     dest_file.write(i.group('func'))
     18     dest_file.write(',')
     19
     20     dest_file.write(i.group('size'))
     21     dest_file.write('/n')

代码中,使用了有名的组,感觉正则表达式就是强大啊!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值