首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ida拆卸名称损坏

Ida拆卸名称损坏
EN

Stack Overflow用户
提问于 2021-08-13 05:09:37
回答 1查看 326关注 0票数 0

在使用idata时,我有时会在idata段中获得类似??0CSGString@@QAE@ABV0@@Z的名称。他们看上去很奇怪,但那是因为名字损坏。但有时我会得到像__imp__DoPopup@4这样的名字,但由于名字的损坏,这种情况似乎不是这样的。此外,我还在另一个反汇编的idata段中获得了相同的函数,但名称为DoPopup。那么我的问题是:第二个函数名有效吗?或者仅仅是IDA弥补了它的一个名字?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-13 05:22:58

@4不是C++名称损坏;它是使用堆栈args的字节数来修饰stdcall函数的约定,例如,使用ret 4而不是普通的ret。这会产生链接器错误,而不是在不匹配的情况下难以调试运行时。

在C++中,函数是extern "C" DoPopup(some_4byte_type)

我们无法推断返回类型。

__imp__foo是DLL中asm符号_foo的DLL导入,所以这实际上不是C++ _imp__DoPopup。除了C++名称mangling之外,我猜想,如果它不是extern "C",那么您可能已经有了__imp__??0CSGString@@QAE@ABV0@@Z来导入该函数。

对于32位Windows来说,用前导下划线来装饰符号是件很重要的事情,尽管它不适用于这里,因为__imp__是它自己的装饰形式,可以代替它。

32位的fastcall也使用名称相同的被调用pops,但是前两个are是在寄存器中传递的。(我忘了@n是否包括寄存器args将使用的空间。)

请注意,Windows没有为x64符号名和它们的C名称添加前导下划线,并且使用了不同的调用约定-pops,所以这里也不会使用@number装饰。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68767075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档