假设我为每个原始函数设置了10个改变的函数,它们都是相同的,只是执行和数学的不同过程。每次原始函数应该在代码中使用时,我想从10个改变的函数中调用随机函数而不是原始函数。我怎么能这样做,并避免编译其他9个未被随机选择并且不会被使用的更改函数?
这是为具有唯一签名的每个接收器分发“不同”的构建。我能想到的唯一可行的方法是为每个原始函数创建一个文件夹,其中包含10个单独的包含文件,用于每个更改的函数。这有点混乱,但这是我能想到的唯一方式。
如果有更简单的方法,我想要实现的目标,请告诉我。例如,在编译时随机添加垃圾代码到原始函数 - 这会更好,因为它是动态的。我无法想象如何做到这一点。
这里有一些伪:http://pastebin.com/v7Hv53nS
答案 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;
}