想要了解使用模板的本文

时间:2014-04-16 06:37:06

标签: c++ templates template-meta-programming

我发现本文搜索有关C ++模板元编程的链接。我是C ++中安全性和模板的新手,我希望有人可以指出我正确的方向。我没有其他理由感到它激起了我的兴趣,而且我想了解更多。

以下是论文:https://www.cisuc.uc.pt/publication/showfile?fn=1357250736_metaobfv3.pdf

或者只是搜索名称:通过C ++模板元编程实现二进制代码混淆

我似乎无法弄清楚程序员将如何使用它。他们是通过模板创建类型,然后在原始代码中使用这些类型吗?以下是一些使用的代码:

struct uint32 {
    unsigned int x_;
    uint32(unsigned int x) : x_(x) {}
    uint32(const uint32 &oth) : x_(oth.x_) {}
    uint32 &operator=(const uint32 &oth) { x_ = oth.x_; return *this; }
    operator unsigned int() const { return x_; }
};

static inline uint32 operator+(const uint32 &a, const uint32 &b) {
    return uint32(ObfuscatedAdder<unsigned int>::eval(a.x_, b.x_));
}

这是第6页的一小部分。我试图弄清楚程序员如何使用他们的技术创建...让我们说一个算法......然后对它进行模糊处理。

这将是我假设的额外混淆。我怎么会这样说:

unsigned int foo = 5 + 7;

在代码中并使用模板将其混淆为更复杂的身份?

1 个答案:

答案 0 :(得分:1)

unsigned int foo = 5 + 7;不会被混淆,因为它属于constant folding。并且在编译时将简单地用unsigned int foo = 12;替换。

该技术对于像。

这样的表达式特别有用
uint32 a = 5;
uint32 b = 7;
unsigned int foo = a + b;