首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何读取这个反编译语句?

如何读取这个反编译语句?
EN

Stack Overflow用户
提问于 2020-07-16 16:19:02
回答 3查看 143关注 0票数 0

当我解压缩一个函数时,我得到了以下代码

代码语言:javascript
复制
((void(__thiscall**)(int))(*v4 + 4))(v4);

*v4在这个上下文中是一个虚拟表。我不能真正地把它分解(谁是第一个被解决的,它的确切含义)。

我恳请您帮助我一步一步地解决这个问题,这样我才能理解这是如何工作的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-16 16:29:06

代码语言:javascript
复制
(
    (   // these parens around the type declaration are a cast
        void (__thiscall**)(int) // this type declaration:
                                 // a pointer to pointer to function taking int parameter
    )
    (*v4 + 4) // this is a pointer expression
              // this pointer is being cast to a function
) // this is a function pointer
( // these paren's invoke the function
    v4     // this is the parameter being passed to the function 
);

唯一奇怪的是,作为参数传递的v4不是强制转换的int --它是一个指针。

看起来v4是一个对象,vtable是对象的第一个成员,所以*v4引用vtable。*v4+4指的是第五个vtable条目。

票数 2
EN

Stack Overflow用户

发布于 2020-07-16 16:28:55

代码语言:javascript
复制
((void(__thiscall**)(int))(*v4 + 4))(v4);
                            ^^ pointer
                           ^^^ dereference it
                           ^^^^^^^ add 4
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cast to void (__thiscall**)(int)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Call with v4 as the parameter

void (__thiscall**)(int)是指向具有int参数的函数的指针的指针。

想必:

  • v4是对象的地址。
  • *v4从对象读取vtable指针。
  • *v4 + 4是vtable中我们要调用的函数指针所在的槽。它是指向那个函数指针的指针。
  • 第一个参数是this

请注意,我们正在调用指向函数指针的指针。函数指针在C(++)中自动取消引用,但我不知道这也适用于指向函数指针的指针。很明显,是的。

票数 2
EN

Stack Overflow用户

发布于 2020-07-16 16:33:27

这条语句使用了Microsoft的一些奇怪的调用约定规范,但它基本上只是一个强制转换,然后是一个调用。

(void(**)(int))此类型是指向一个指针的指针,该指针指向以int作为参数的函数,并返回空值。

__thiscall是Microsoft编译器仅支持的调用约定说明符,您可以看到这里

(*v4 + 4)这一部分只是取消引用v4,然后添加4,所以我猜想*v4是一个指针,v4的类型类似于void **

结束所有,这个语句去引用v4,将4添加到这个值中,将这个新指针转换为指向函数指针的指针,然后通过传递v4来调用它。

正如其他人所指出的,v4作为int传递是很奇怪的。但是,由于体系结构似乎是x86,因此不应该破坏任何东西,因为int和指针应该具有相同的32位大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62939081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档