Ida 反汇编出的 “nullsub_()”,是什么意思?

求助大牛,ida 反汇编出的 “nullsub_()”,是什么意思?为什么会出现呢?

看汇编··

1 个赞

thanks

以下是搜索到的解释,有道翻译的。

我从c++的角度回答,其他语言有不同的原因。

这些函数有合法的用途,即使它们只不过是虚函数。

void func(/* any args */) {}

我想到的一个例子是一个虚函数,它在基类中不做任何事情,但是在派生类中被重写。一个类似的例子是模板函数,它的一般情况是空的,但是专门化不是。

还有一种情况是静态变量。静态变量析构函数必须在程序末尾调用,程序通常在第一次访问该变量时使用atexit注册析构函数回调。我记得,c++标准说没有可观察行为的析构函数可能不会被调用,但是我已经看到MSVC 6.0注册nullsubs作为析构函数。

全局变量遵循类似于静态变量的规则。

根据编译器的说法,另一种可能是一个函数没有任何效果。函数必须存在,以防某些东西(例如,另一个编译单元不知道实现是空的)试图调用它,但是它的主体是空的。
注意“根据编译器”并不总是等于编码器的理解。我自己曾经写过一个清理函数,它做了很多工作,但它错误地使用了值而不是引用的参数。编译器在没有任何警告的情况下将整个函数体优化为{}。哦。

1 个赞