[英]String modification in C++ macro
有沒有辦法從宏修改C ++中的字符串文字?
這樣做的原因是混淆了代碼,尤其是兩個互斥鎖:
我知道像XOR或shifting這樣的原始修改不足以進行專業分析,但對我而言已經足夠了。
您可以創建一個實際上沒有做任何事情的宏,但可以將宏用作自定義構建步驟的“標記”(簡單腳本可能會執行此操作),以在預處理器獲取源代碼之前混淆字符串。
您可以使用宏將字符串傳遞給執行“加密”的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
。 不幸的是,在實現底層語言功能方面進展緩慢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.