Class 从x86-64可执行文件中查找类和函数名

Class 从x86-64可执行文件中查找类和函数名,class,assembly,x86-64,reverse-engineering,symbols,Class,Assembly,X86 64,Reverse Engineering,Symbols,我想知道,在反转应用程序时,是否总是能够以某种方式获得函数名和类名。(在本例中是一个游戏)我已经尝试了大约1个月来反转一个游戏(刺客信条统一(铁砧引擎)),但仍然没有获得函数名。我找到了一种获取类名的方法,但是没有关于函数名的线索。 所以我的问题是,是否有可能从文档中获取函数名,并创建层次结构。(我这样做是为了更好地倒车并学习新东西(asm x64)) 任何与反转类/结构器相关的提示和技巧都值得欣赏。不,编译代码不需要函数名和类名,而且通常不属于去掉符号表的可执行文件的一部分 例外的是跨DLL边

我想知道,在反转应用程序时,是否总是能够以某种方式获得函数名和类名。(在本例中是一个游戏)我已经尝试了大约1个月来反转一个游戏(刺客信条统一(铁砧引擎)),但仍然没有获得函数名。我找到了一种获取类名的方法,但是没有关于函数名的线索。 所以我的问题是,是否有可能从文档中获取函数名,并创建层次结构。(我这样做是为了更好地倒车并学习新东西(asm x64))


任何与反转类/结构器相关的提示和技巧都值得欣赏。

不,编译代码不需要函数名和类名,而且通常不属于去掉符号表的可执行文件的一部分

例外的是跨DLL边界的调用,在那里您可能会得到一些包含函数和类名的被损坏的C++名称,或者如果在发布版本中有任何错误检查/断言消息,那么一些名称可能会出现在字符串中。 带有RTTI(运行时类型信息)的C++可能在某个地方有类型名,可能将vtable指针映射到字符串,或者对于没有虚拟成员的类,可能只有在实际使用了

typeid
时才有。(如果在禁用RTTI的情况下编译,则根本不需要。)

我认为即使是异常处理也不需要二进制中的类名

除此之外,编译后的二进制文件中不需要类名或函数名。绝对不是机器代码本身;这当然是所有指针/相对偏移量,即使对于具有虚拟函数的类也是如此


与Java不同,C++通常不支持内省,因此默认情况下不需要在任何地方的可执行文件中包含您要查找的任何信息。

啊,好的:/n您知道如何轻松检查是否启用了RTTI吗?@IHateAndLoveASM:不知道。我不知道它会创建什么数据/元数据,也不知道搜索包含
的字符串是否会起作用。大多数游戏出版商希望使他们的代码逆向工程变得困难,所以他们不可能用RTI来编译。RTRTI也会长时间地运行一些时间和惩罚二进制(在2000左右,当我在开发Windows游戏时),所以我们当然不使用任何C++部分。不确定当前编译器的状态如何(也许RTTI现在可以负担得起),但可能是游戏开发人员正在使用许多旧的工具/库,并且仍然宁愿不使用RTTI(如果没有其他原因的话),因为惯性。RTTI还为游戏开发中不常见的问题提供了解决方案,如果您几乎不涉及其中一个问题,通常可以通过其他方式合理解决results@IHateAndLoveASM顺便说一句,没有来源的软件是“僵尸”,它可能需要数年才能最终消失,但你的努力有点“浪费”时间(除了你确实通过这个练习提高了你的编程技能,所以我在“浪费”一词中加了引号)。当您想要修改某些软件时,修改源代码的效率要高得多。因此,请确保您抓住了这样一个关键点,即您的工作将从提供经验的探索转变为繁琐的机械逆向工程,在这一点上,让ACU游戏继续下去,并将重点放在更有意义的(未来的)分布式软件上。