小编Cur*_*519的帖子

使用constexpr编译时间字符串加密

我想要一个编译时字符串加密,这样我就可以在我的代码中编写:

const auto encryptedInvalidLicense = ENCRYPT("Invalid license");
std::cout << encryptedInvalidLicense.decrypt() << std::endl; // outputs "Invalid license"
Run Code Online (Sandbox Code Playgroud)

并且字符串"Invalid license"不会出现在二进制文件中.预构建可能是答案,但我正在寻找一个纯c ++ constexpr解决方案来解决这个问题,它将得到VS2015的支持.

有什么建议?


  1. 我已经研究过编译时字符串加密,它没有为问题提供constexpr解决方案.

  2. 我还研究了http://www.unknowncheats.me/forum/c-and-c/113715-compile-time-string-encryption.html.虽然它是一个constexpr解决方案,但VS2015仍然将字符串纯文本添加到二进制文件中.

c++ reverse-engineering constexpr c++11 c++14

15
推荐指数
1
解决办法
5835
查看次数

[[nodiscard]] 到函数指针

我想使用第三方函数,它通过充满函数指针的结构提供其 API。例如:

struct S {
    using p_func1 = int(*)(int, int);
    p_func1 func1;
    using p_func2 = int(*)(char*);
    p_func2 func2;
}
Run Code Online (Sandbox Code Playgroud)

第三方库初始化该结构。需要检查这些函数(func1、func2)的返回值,我希望能够以某种方式在属性上体现出来,[[discard]]以确保返回值得到检查。

有什么办法可以做到这一点,同时保持结构的 ABI?

编辑:到目前为止,我能想到的最好的办法就是拥有另一个结构,如下所示:

struct S_wrap {
    S orig;
    [[nodiscard]] int func1(int a, int b){ return orig.func1(a, b); }
    [[nodiscard]] int func2(char* a){ return orig.func2(a); }
}
Run Code Online (Sandbox Code Playgroud)

我希望有更好的东西

c++ c++17 nodiscard

6
推荐指数
1
解决办法
547
查看次数

标签 统计

c++ ×2

c++11 ×1

c++14 ×1

c++17 ×1

constexpr ×1

nodiscard ×1

reverse-engineering ×1