找回密码
 加入
搜索
查看: 1838|回复: 0

[系统综合] 调用COM组件返回空值的问题

[复制链接]
发表于 2012-7-12 09:17:46 | 显示全部楼层 |阅读模式
本帖最后由 lvjing79 于 2012-7-12 09:19 编辑

我用au3调用deviare的组件来实现api hook功能。
调用组件和hook都正常,也能捕捉到想hook的api函数。但在获取api函数的参数时有点问题。
先来看一下在vbscript中响应事件的代码
Sub spyMgr_OnFunctionCalled(ByVal hook, ByVal proc, ByVal callInfo)
        Dim paramEnum, param1,param4

        Set paramEnum = callInfo.Params()
        Set param1 = paramEnum.GetAt(0)
        Set param4 = paramEnum.GetAt(4)
        
        If param4.LongVal = 1 Then
                '函数调用前修改参数
                If callInfo.IsPreCall Then
                        WScript.Echo param1.Value
                        param4.LongVal = 2
                End If
        End If
        
End Sub
再来看看au3的代码:
Func spyMgr_OnFunctionCalled($hook, $proc, $callInfo)
        Local $paramEnum, $param1, $param4
        
        WriteLog("Function called: " & $hook.FunctionName & " within process " & $proc.Path & " " & $callInfo.ToString())
        $paramEnum = $callInfo.Params()
        
        $param1 = $paramEnum.GetAt(0)
        $param4 = $paramEnum.GetAt(4)
        
        If $param4.LongVal = 1 Then
                ;函数调用前修改参数
                If $callInfo.IsPreCall Then
                        WriteLog($param1.Value)
                        $param4.LongVal = 2
                EndIf
        EndIf

EndFunc   ;==>spyMgr_OnFunctionCalled
这一句代码:
$paramEnum = $callInfo.Params()
执行后,$paramEnum是一个空值,没有得到任何东西。
但上面一句:
WriteLog("Function called: " & $hook.FunctionName & " within process " & $proc.Path & " " & $callInfo.ToString())
从输出来看,$callInfo.ToString()是有东西的,表明$callInfo是存在的,不是空的。
一直想不明白是为何道理,请高人指点一下,谢谢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-28 03:18 , Processed in 0.072093 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表