软件测试-二进制插桩

 

关键词:插桩,软件测试

 

 

二进制插桩作用

1.        程序运行时拦截,在运行时向程序注入我们自己的代码。

2.        调试程序

3.        Tracing and logging, 分析函数调用关系图,api覆盖数据。

4.        提取数据,从程序中提取一些感兴趣的关键data。

5.        改变程序行为,如程序打补丁,模拟数据(emulation)。

 

一般二进制插桩方法

  •  LD_LIBRARY_PRELOAD

LD_PRELOAD设置一个动态库路径,该动态库会在其他库(包括the C runtime, libc.so)之前加载。下面可以使程序ls使用我们自己编写的malloc ()

$ LD_PRELOAD=/path/to/my/ libmalloc.so  /bin/ls

  •  替换动态库

编写拦截函数,加载原来系统的动态库。

 

 

二进制插桩方法

注入指令(inject)

         函数地址查找,插入和移除插桩,调用原始函数地址(写回原指令,并刷新cache)。

        

注入动态库

补丁(patch)

 

符 查找

Proc文件,/proc/<PID>/maps

ELF文件,符 段里面查找符 。

计算绝对地址,相对地址+基址(Symbol address + base address)

 

插桩开发

内存泄漏check动态库

使用我们自己的malloc hook程序的malloc调用。

编译和执行

 

 

Intel  pin工具

         从intel 站下载pin-2.13-65163-gcc.4.4.7-linux.tar.gz

         解压后就可以使用。

         编译pintool工具

检查ls程序

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2014年8月6日
下一篇 2014年8月6日

相关推荐