关键词:插桩,软件测试
二进制插桩作用
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进行处理,非常感谢!