当我在 IDA pro 中查看 vtable 结构时,我知道这___cxa_pure_virtual
意味着该函数是虚拟的。
但是nullsub_XXX
在 vtable 结构中是什么意思呢?
当我在 IDA pro 中查看 vtable 结构时,我知道这___cxa_pure_virtual
意味着该函数是虚拟的。
但是nullsub_XXX
在 vtable 结构中是什么意思呢?
欢迎来到逆向工程堆栈交换问答网站!虽然你只是问了nullsub_
,但你描述的___cxa_pure_virtual
有点不正确,所以我也描述一下
通过为某些类型的函数添加前缀或名称,IDA 会根据函数的实现为函数提供有意义但通用的名称。
一种这样的情况是nullsub
,它是(在分析阶段)自动赋予所有空函数的名称。意思是只返回而不做任何事情的函数。
此外,由于名称在 IDA 中是唯一的,当使用中的名称设置为函数时,IDA 将在其后加上下划线,然后是自动递增的数字(从 1 开始)。
如果您想知道为什么首先应该存在这样的函数,这篇文章会非常认真地回答这个问题。
这是一个由libstdc++
(并且类似的函数由其他 C++ 标准库实现)作为虚函数表中纯虚函数的占位符实现的函数。
尽管纯虚函数没有实现,但编译器无法消除在运行时调用纯虚函数的风险,因此诸如此类的存根___cxa_pure_virtual
用作所有纯虚函数的占位符,因此如果发生这种情况一个纯虚函数将在运行时被调用,有一个显式的处理(程序终止时经常发生一些有意义的崩溃)。