我正在使用一些简单的代码测试IDA,以了解如何使用它,并且因为它没有正确反编译命名空间中的静态函数而陷入困境:
以这种方式声明的函数:
namespace pvrtex
{
bool transcode(CPVRTexture& tex,
const PixelType fmt,
const EPVRTVariableType chType,
const EPVRTColourSpace clrSpace,
const ECompressorQuality q,
const bool dither = false);
}
这个功能最终得到了这个签名:?transcode@pvrtex@@YA_NAAVCPVRTexture@1@TPixelType@1@W4EPVRTVariableType@@W4EPVRTColourSpace@@W4ECompressorQuality@1@_N@Z
。 Online demangler生成正确的c ++签名。当我在IDA中加载我的可执行文件时,它也会显示相同的函数签名,但是,当我尝试反编译此函数时,IDA错误地将此函数视为pvrtex类的某些成员函数,并且内部所有代码最终都会出现一些随机的混乱:
bool __cdecl pvrtex::transcode(pvrtex *__hidden this, struct pvrtex::CPVRTexture *, union pvrtex::PixelType, enum EPVRTVariableType, enum EPVRTColourSpace, enum pvrtex::ECompressorQuality, bool)
。
这是一个错误吗?可以做些什么来解决它?我试图rclick功能并编辑它并指定它是静态的,但没有任何变化:IDA仍将其视为具有隐藏pvrtex *__hidden this
的成员函数。