基于原始函数调用随机改变的函数

时间:2015-08-16 22:16:58

标签: c++ function random

假设我为每个原始函数设置了10个改变的函数,它们都是相同的,只是执​​行和数学的不同过程。每次原始函数应该在代码中使用时,我想从10个改变的函数中调用随机函数而不是原始函数。我怎么能这样做,并避免编译其他9个未被随机选择并且不会被使用的更改函数?

这是为具有唯一签名的每个接收器分发“不同”的构建。我能想到的唯一可行的方法是为每个原始函数创建一个文件夹,其中包含10个单独的包含文件,用于每个更改的函数。这有点混乱,但这是我能想到的唯一方式。

如果有更简单的方法,我想要实现的目标,请告诉我。例如,在编译时随机添加垃圾代码到原始函数 - 这会更好,因为它是动态的。我无法想象如何做到这一点。

这里有一些伪:http://pastebin.com/v7Hv53nS

1 个答案:

答案 0 :(得分:0)

这个问题可分为两个小问题。

第1部分:确定要向接收方提供的变体。这相当于将签名映射到{1,...,10}而没有冲突。顺便说一下,这意味着最多可以有十个唯一的签名。 (如果使用多个函数执行此操作,则必须确定每个接收器是否应接收一组独特的实现唯一的一组实现,但不要紧,现在。)这似乎不是你要问的部分,所以我们假设我们将这个逻辑放入一个名为pickVariant的可执行文件(例如脚本)中。

第2部分:给定变体的选择,编译变体并为接收器构造包(可执行文件,库,等等)。我会这样做:

在Makefile中:

VARIANT := $(shell pickVariant $(SIGNATURE))

foo.o: foo.cc
    @$(CXX) $< -DVARIANT=$(VARIANT) -c -Wall -o $@

在foo.cc中:

int addTwo(int n)
{
  int res;
#if VARIANT==1
  res = n+2;
#elif VARIANT==2
  res = n+1+1;
#elif VARIANT==3
  res = 5+n-3;
...
#elif VARIANT==10
  res = 2*n+2-n;
#endif

  return res;
}