为了学习(和娱乐),我一直在使用 IDA Pro 分析文本编辑器应用程序。在查看反汇编时,我注意到许多函数调用是通过显式调用函数名称进行的。例如,我注意到 IDA 将大多数函数调用转换为以下两种格式。
call cs:CoCreateInstance
或者
call WinSqmAddToStream
但有时格式不使用函数名。下面的示例包含导致相关行的代码。第三行代码似乎“缺少”了函数名称。(评论是我自己的。)
mov rcx, [rsp+128h+var_D8] // reg CX gets the address at stack pointer+128h+var_D8 bytes
mov r8, [rcx] // the address at reg CX is stored to reg r8
call qword ptr [r8 + 18h] // at address rax+18h, call function defined by qword bytes
我的问题如下:
如何
call qword ptr <address>
在反汇编中建立和函数之间的连接?我知道 IDA 不能在这里使用函数名,因为它不知道存储在寄存器 R8 中的值……那么是什么原因造成的?开发人员是否使用了某种语法或约定?换句话说,开发人员是否
WinSqmAddToStream
以与 处的函数不同的方式调用该函数[r8+18h]
?