编译时函数加密

Compile time function encryption

我想知道编译时函数加密之类的东西是否可能,如果可能的话,有人如何实现它? "compile time function encryption" 我的意思是在编译期间加密函数代码,然后在运行时在需要调用该函数时解密代码。

提前致谢!

不,编译时加密和任何代码自修改在c++中都是不可能的。

标准 C++ 不允许将代码作为数据访问。

int f(int);

reinterpret_cast<int*>(&f) = 1;

无效,您无法将 "code" 作为数据访问。 当然你也不能在编译时访问代码作为数据。 所以你既不能加密也不能解密你的涂抹。

仍然有一些工具可以实际执行此操作。但它们依赖于运行时特定于实现的行为。在编译时,他们只是添加了额外的步骤,这通常是编译器不知道的,并且在编译后通过篡改编译器输出发生。

有些东西可能在可移植的 C++ 中工作,至少在理论上,这不是您 想要的 ,但它是您所要求的 "compile time function encryption"。

如果你为你的函数定义了一些语法,比如,你可以解析,比方说,const char* function = "(a, b, c) { return a + b * c; }",那么如果你可以添加 constexpr 加密函数,你的程序中就会有这样的函数在编译时加密,并且可以在执行前解密。

当然标准也不要求调用 constexpr 函数来生成静态初始化数据确实发生在编译时,但这是良好实现所期望的。