C++程序反编译笔记(17) this指针参数处理
this指针是C++成员函数中隐含的一个参数, 一般是第一个参数. 比如

在对应的汇编代码中, 一般是用寄存器ECX来存放this指针. 上图中的 __thiscall 是调用约定中的一种, 说明这个函数隐含有this指针. (如果有需要的话, 可以写一篇文章来说一下调用约定)
最开始的时候, IDA Pro将一些函数识别为了__thiscall 的, 也就是成员函数. Visual Studio是不支持将函数声明为__thiscall 的, 所以, 我将__thiscall 用宏替换为空, 就不会报错了.

类和结构体的识别
在反编译的过程中, 对this指针的处理一般是 : (1) 将this替换为其他名称, 比如self, 因为this是C++关键字, 不能作为参数名. (2) 使用 #define __thiscall 替换掉__thiscall. 此时, 该函数将变成普通的函数.
对于成员变量, IDA Pro一般也是识别不出来的. 只能识别出一个类型错误的指针. 需要首先分析出整个类或结构体包含的成员变量的字节数. 然后根据使用到成员变量的地方详细分析出每个变量的字节数.
分析出成员变量就完成绝大部分了. 只需要把函数放到类或结构体中就完成了类或结构体的识别.
反编译扫雷时用不到上述知识.

扫雷this指针处理
反编译扫雷时, 所有包含this指针的函数都是这个形式的

也就是根本没用到, 所以完全可以把这个参数去掉. 这种情况很可能是IDA Pro分析出错了, 我对着汇编代码确认了一遍, 发现确实没用到, 那么可以安心的去掉了.
这么做的意义在于可以少量的减少代码, 去掉一点影响分析的因素.