使用call命令在GDB中重复调用某函数
来源:互联网 发布:js点击按钮提交表单 编辑:程序博客网 时间:2024/06/15 20:30
在白盒测试中经常使用GDB进行函数的分支覆盖测试,但在测试对象函数触发很困难,测试效率就很低下。
假设测试函数fun1有10条分支。每次进入fun1需设置10个变量。
那么一般情况下要在GDB中操作10 * 10 = 100次才能将该分支覆盖完毕。
经过查找,GDB中存在一种方法,重复调用该函数,使用10+10 =20次即可覆盖分支。
GDB使用步骤:
1)首先对该函数打断点
有以下函数:
int webprc_cmmenu_lchk(WEB_CMMENU_LAN_PATH_CHK_STATUS *result, int filetype,CM_COMMON_INFO *cominf, WEB_FLAG_TYPE type, char *errmsg)
2)第一次,手动进入该函数
GDB将显示以下msg:
Breakpoint 2, webprc_cmmenu_lchk (result=0x1006cc8c, filetype=60, cominf=0x48197008, type=0 '\000', errmsg=0x10087f30 "\302\302\302\302\302\302"...) at webcmmenu.c:212212 webprc_lock(WEB_SEM_LOCK);(gdb) n213 result->status.status.size = sizeof(WEB_CMMENU_LAN_PATH_CHK_STATUS); (gdb) n214 result->run_status = WEBSTS_CMMENU1_LANPATCH_CHK;
在前两行中显示了在进入webprc_cmmenu_lchk时各个参数的值:
<pre>
result = 0x1006cc8c
filetype = 60
cominf=0x48197008
type=0
errmsg = 0x10087f30
</pre>
3)继续执行,执行完函数时,即到达函数的结尾“}”时,不要退出该函数!
在GDB中执行以下命令:
call webprc_cmmenu_lchk(result=0x1006cc8c, filetype=60, cominf=0x48197008, type=0,errmsg=0x10087f30)
GDB将输出以下log:
此时即意味着webprc_cmmenu_lchk函数又重新执行,进入参数与上一次执行相同。
原理:
经常用到GDB中call命令对字符串进行赋值操作,大多数都是调用系统库函数。
而在调用项目中的函数时,只要确定进入函数时的寄存器状态,自然可以重复调用该函数了。
0 0
- 使用call命令在GDB中重复调用某函数
- GDB工具使用教程_函数调用栈(call stack)探密
- gdb 调用栈 (call stack)
- gdb中list命令使用
- 在脚本中使用gdb
- Shellcode中ret调用和call调用函数区别
- 函数调用:call
- 手把手教你玩转GDB(四)—函数调用栈(call stack)探密
- 手把手教你玩转GDB(四)——–函数调用栈(call stack)探密
- php中使用exec,system等函数调用系统命令
- php中使用exec,system等函数调用系统命令
- php中使用exec,system等函数调用系统命令
- php中使用exec,system等函数调用系统命令
- php中使用exec,system等函数调用系统命令
- php中使用exec,system等函数调用系统命令
- php中使用exec,system等函数调用系统命令
- php中使用exec,system等函数调用系统命令
- php中使用exec,system等函数调用系统命令
- 分布式计算,网格计算和云计算的异同
- web application protection(wap)2.0语法问题解决笔记
- Unique Paths
- Java Web 学习笔记 1——内置对象
- UI抽屉菜单DrawerLayout(一)(测拉菜单)
- 使用call命令在GDB中重复调用某函数
- UVA11040 - Add bricks in the wall
- jvm学习笔记(三)
- LeetCode之Spiral Matrix
- Maven学习笔记之(一)
- 蓝桥杯 公式解析 STL中栈的运用
- linux中shell的变量类型
- 1.编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。
- JavaScript继承详解(三)