关于 msvbvm60.__vbaVarVargNofree 的一些理解

完全是猜测!

函数名:__vbaVarVargNofree

函数功能:从一个Variant变量中提取指针

输入变量:ecx(指定的esi值), edx(Variant变量)

输出变量:eax(指针)

参考示例:

005F969B    51              push    ecx
005F969C    52              push    edx
005F969D    8BD7            mov     edx, edi
005F969F    8D4D A8         lea     ecx, dword ptr ss:[ebp-58]
005F96A2    C745 98 0480000>mov     dword ptr ss:[ebp-68], 8004
005F96A9    8945 C0         mov     dword ptr ss:[ebp-40], eax
005F96AC    895D C4         mov     dword ptr ss:[ebp-3C], ebx
005F96AF    C745 B8 0500000>mov     dword ptr ss:[ebp-48], 5
005F96B6    E8 26F4B065     call    msvbvm60.__vbaVarVargNofree

函数体:

66108AE1 >/$  56            push    esi                              ;  __vbaVarVargNofree
66108AE2  |.  8BC2          mov     eax, edx
66108AE4  |.  8BF1          mov     esi, ecx
66108AE6  |.  66:8B08       mov     cx, word ptr ds:[eax]
66108AE9  |.  F6C5 40       test    ch, 40                           ;  判断是否为指针类型
66108AEC  |.  74 15         je      short msvbvm60.66108B03          ;  不是就跳转
66108AEE  |.  66:81F9 0C40  cmp     cx, 400C                         ;  判断是否为Variant指针
66108AF3  |.  75 05         jnz     short msvbvm60.66108AFA          ;  是就跳转
66108AF5  |.  8B40 08       mov     eax, dword ptr ds:[eax+8]        ;  普通指针,直接取出
66108AF8  |.  5E            pop     esi
66108AF9  |.  C3            retn
66108AFA  |>  50            push    eax                              ;  是Variant指针
66108AFB  |.  56            push    esi
66108AFC  |.  E8 DD76FFFF   call    msvbvm60.661001DE                ;  关键call,挺复杂的
66108B01  |.  8BC6          mov     eax, esi
66108B03  |>  5E            pop     esi                              ;  不是指针,直接返回
66108B04  \.  C3            retn


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值