lvjing79 发表于 2012-7-12 09:17:46

调用COM组件返回空值的问题

本帖最后由 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是存在的,不是空的。
一直想不明白是为何道理,请高人指点一下,谢谢!
页: [1]
查看完整版本: 调用COM组件返回空值的问题