我想通过改变控制流程。
通行证应更改if
条件。
假设原始代码如下所示。
int main(int argc, char *argv[])
{
if (atoi(argv[1]) % 2 == 0)
printf("even\n");
else
printf("odd\n");
return 0;
}
应用我的通行证后,代码应更改为以下内容。 (这并不意味着要更改 source 代码,而是实际更改 IR 代码。)
int main(int argc, char *argv[])
{
if (atoi(argv[1]) % 2 == 1) //the condition of if statement is changed to 1
printf("even\n");
else
printf("odd\n");
return 0;
}
这只是我真正想做的一个玩具示例,但我对此有困难
答案 0 :(得分:2)
首先将此代码编译为LLVM IR,以了解您要进行的工作:
# clang -S -emit-llvm -o - main.c
然后您将看到您对icmp
指令及其操作数感兴趣。通过时,遍历Function
中的所有指令,使用ICmpInst
或isa<>
搜索dyn_cast<>
,然后使用getOperand()
方法分析其操作数并替换{值ConstantInt
的{1}}操作数与值0
相同的ConstantInt
。