有没有办法从宏修改C ++中的字符串文字?
原因是混淆了代码,尤其是2个互斥体希望:
我知道像XOR或移位这样的原始修改对于专业分析来说还不够,但它们对我来说已经足够了。
答案 0 :(得分:3)
您可以创建一个实际上没有做任何事情的宏,但是在预处理器获取源代码之前,使用宏作为自定义构建步骤(简单脚本可能会执行此操作)的“标记”来混淆字符串。
答案 1 :(得分:3)
您可以使用宏将字符串传递给执行"加密的constexpr
函数。"从C ++ 14开始,constexpr
更容易使用。
// Similar to std::array, but with a member pointer as an accessor.
// It's complicated.
template< std::size_t length >
struct string_holder {
char str[ length ];
char const * ptr = str;
};
template< std::size_t length >
constexpr string_holder< length > encrypt( char const (& in)[ length ] ) {
string_holder< length > result = {};
for ( std::size_t i = 0; i != length - 1; ++ i ) {
result.str[ i ] = in[ i ] ^ 1; // Do encryption here.
}
return result;
}
#define ENCRYPT( STR ) ( encrypt( STR ).ptr )
char const * const & s = ENCRYPT( "password123" );
http://coliru.stacked-crooked.com/a/3b6f6753d9f722cb
注意,s
需要声明为const&
引用才能利用生命周期扩展。你也可以写auto const& s
或auto &&s
;它会是一样的。 Clang的当前版本不允许s
声明constexpr
,但我认为这是一个错误。
理想情况下,你可以写一个用户定义的文字,如"password123"_encrypted
。不幸的是,实现基础语言功能的进展缓慢。