我是一名中级“C”学习者。我在c中编写了一个简单的函数,编译(发布)成功。 我了解到在函数中添加extern“C”会禁止编译器修改它的名称。所以,我在我的函数中添加了extern“C”,但在将它放到ida pro之后为什么我找不到我的函数名?
它包含很少的功能,但有一些子前缀,其他是编译器特定的,我找不到我编译的功能。
如果我的反汇编功能是错误的那么请建议,我知道它可以在构建时在Visual编辑器中完成,但我想以其他方式。
答案 0 :(得分:2)
听起来你正在构建一个可执行文件。在构建库时,仅为导出的项目保留名称。当你构建一个可执行文件时,名称(被破坏或不被破坏)可以被丢弃(由编译器和链接器)因为它们不再需要 - 对可执行文件中的函数和变量的引用都是用数字完成的。
如果您将代码构建为库(.dll
/ .so
/ .dylib
,具体取决于平台)并将您的函数标记为已导出,则会看到名称。
如果使用IDA查看中间对象文件(.o
/ .obj
),也可以看到名称。那些仍然包含名称,因为链接器需要它们在链接过程中按名称查找函数。
最后,有一种方法可以让函数名称显示在IDA中 - 在启用符号的情况下构建可执行文件(例如,如果您正在使用MS工具,则生成.pdb
文件)。 IDA将注意并提供加载符号,这些符号将名称与功能相关联。