52.windbg-Call Function调试技巧(调用函数)

.call 命令使得目标进程执行一个函数。

语法

.call [ /vFunction (  Arguments 
.call /c 
.call /C 
.call /s
  Prototype Function( Arguments )


指定函数是被当前进程的当前线程调用的。

只支持 cdeclstdcallfastcallthiscall 调用约定。不能使用该方法调用托管代码


Arguments不能使用字符串作为参数,但是可以使用字符串指针,或目标进程可以访问的其它任何内存

我们可以看下以下的示例:

0:000> ln 011334e0 
e:\verifytxsigndemo\verifytxsigndemo\antihook.cpp(215)
(011334e0)   VerifyTxSignDemo!ComputeModulePath   |  (01133740)   VerifyTxSignDemo!StringVPrintfWorkerA
Exact matches:
    VerifyTxSignDemo!ComputeModulePath (char *)
0:000> .call VerifyTxSignDemo!ComputeModulePath("hook.dll")
String literals not allowed in '"hook.dll")'
提示不允许使用字符串"hook.dll",那么我们去堆栈中找一块,考虑到是栈是从上到下分配的,而字符串是从小到大读的,那么就取esp-100做为首地址吧:

0:000> r $t0 = esp-100
0:000> r $t0
$t0=0022ebc8
0:000> dd $t0
0022ebc8  00000000 00000000 00000000 00000000
0022ebd8  00000000 00000000 00000000 00000000
0022ebe8  00000000 00000000 00000000 00000000
0022ebf8  00000000 00000000 00000000 00000000
0022ec08  00000000 00000000 00000000 00000000
0022ec18  00000000 00000000 00000000 00000000
0022ec28  00000000 00000000 00000000 00000000
0022ec38  00000000 00000000 00000000 00000000
0:000> eza $t0 "hook.dll"
0:000> da $t0
0022ebc8  "hook.dll"
0:000> .call VerifyTxSignDemo!ComputeModulePath($t0)
Unexpected character in '$t0)'
0:000> .call VerifyTxSignDemo!ComputeModulePath(@$t0)
Thread is set up for call, 'g' will execute.
WARNING: This can have serious side-effects,
including deadlocks and corruption of the debuggee.
注意到必须使用@$t0,使用$t0不行!

第一行提示windbg已经为函数调用做好准备,输入g命令将执行这个函数

后两行表示这样调用目标程序的函数可能有严重的后果,包括死锁和崩溃

输入g来执行函数:

0:000> g
.call returns:
char * 0x00270000
 "E:\VerifyTxSignDemo\Debug\"





















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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值