为什么没有精确的C++;反编译器? 为什么不可能创建一个C++的反编译器,它将像java和C++的.< /p>
那样精确地运行,因为C++编译器一般不把任何信息放进可执行文件中,而不是绝对必须的(特别是如果它们在发布模式而不是调试构建中编译),因此,准确反编译程序所需的信息根本不存在于可执行文件中为什么没有精确的C++;反编译器? 为什么不可能创建一个C++的反编译器,它将像java和C++的.< /p>,c++,reverse-engineering,decompiler,C++,Reverse Engineering,Decompiler,那样精确地运行,因为C++编译器一般不把任何信息放进可执行文件中,而不是绝对必须的(特别是如果它们在发布模式而不是调试构建中编译),因此,准确反编译程序所需的信息根本不存在于可执行文件中 当然,C++编译器可以包含可执行文件中的所有必要信息(例如在最简单的实现中,它可以简单地包括源代码本身在可执行文件中的副本),但是这样做会使可执行文件明显更大,大多数非开源的C++开发人员都希望其他人无法对可执行文件进行反编译,所以对该功能的需求不多。,因为C++编译器一般不将更多的信息放入可执行文件中,而不是
当然,C++编译器可以包含可执行文件中的所有必要信息(例如在最简单的实现中,它可以简单地包括源代码本身在可执行文件中的副本),但是这样做会使可执行文件明显更大,大多数非开源的C++开发人员都希望其他人无法对可执行文件进行反编译,所以对该功能的需求不多。,因为C++编译器一般不将更多的信息放入可执行文件中,而不是绝对需要。(尤其是当它们是在发布模式下编译而不是在调试版本中编译时),因此,精确反编译程序所需的信息根本不存在于可执行文件中
当然,可以编译一个C++编译器,它包含了可执行文件中的所有必要信息(例如在最简单的实现中,它可以简单地包括源代码本身在可执行文件中的副本)。但是,这样做会使可执行文件明显变大,并且大多数非开源的C++开发人员都希望其他人无法对可执行文件进行反编译,因此对该功能的需求不多。
内联。许多C++代码在优化的构建中被内联。这会对任何形式的反编译器造成严重破坏。为了找出一个函数是内联的,反编译器必须分析内联代码的细节并将它们匹配起来。而内联优化步骤可以使代码非常不同,这取决于内联的位置。
constexpr
提供了一种更自然的方式来在编译时进行一些计算。显然,编译时函数调用或元函数实例化不能成为编译后的可执行文件的一部分。只有它们的结果才可以是(因为这是重点)std::type_info
也不提供任何内容。原因是,如果编译器没有检测到某个特定类型将调用typeid
,那么编译器就不需要为它生成std::type_info
对象。即使它提供了,给你的只是一个对象的名称(和标识符).没别的了
有几个原因:
内联。许多C++代码在优化的构建中被内联。这会对任何形式的反编译器造成严重破坏。为了找出一个函数是内联的,反编译器必须分析内联代码的细节并将它们匹配起来。而内联优化步骤可以使代码非常不同,这取决于内联的位置。
constexpr
提供了一种更自然的方式来在编译时进行一些计算。显然,编译时函数调用或元函数实例化不能成为编译后的可执行文件的一部分。只有它们的结果才可以是(因为这是重点)