编译时函数加密
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
函数来生成静态初始化数据确实发生在编译时,但这是良好实现所期望的。
我想知道编译时函数加密之类的东西是否可能,如果可能的话,有人如何实现它? "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
函数来生成静态初始化数据确实发生在编译时,但这是良好实现所期望的。