【发布时间】:2019-06-03 09:56:38
【问题描述】:
在将一些混淆的 C 代码移植到 C++(即 Harm Geert Muller 的 Fairy-Max 国际象棋引擎)后,我收到很多类似以下的警告:
在 '&' 的操作数 [-Werror=parentheses] 中的比较周围建议使用括号
在 '&' 的操作数中建议在 '+' 周围加上括号
虽然关闭警告不是一个选项,但解决方案是根据operator precedence在表达式中添加括号。
例如:
if(z&S&&!ab&K==INF&d>2&v>V&v<Beta){
需要改成这样:
if((z&S) && ((!ab)&(K==INF)&(d>2)&(v>V)&(v<Beta))) {
但手动执行此操作非常耗时。
我尝试使用this去混淆工具,内部使用clang-format,但它没有在表达式中添加括号...
问题
是否有可以将 C/C++ 表达式作为输入并返回无警告等效表达式作为输出的工具(最好是在线工具)?
【问题讨论】:
-
开玩笑地,学习运算符优先级表不是更简单吗?曾经有人建议我在楼下厕所的门后面贴一份副本。就我个人而言,我发现“去混淆”版本更容易混淆。
-
But doing this manually is quite time-consuming你不能自动完成。这段代码的作者对可能与运算符优先级不同的表达式有一个想法。您需要查看这些警告并明确逻辑。 -
@UmNyobe,代码工作正常,我不需要查看它。我只想生成一个无警告代码。我当然可以自动完成。
-
@Bathsheba,您的评论与我的问题无关。抱怨表达式的是编译器,我和编译器都知道优先级表。
-
我知道有些人出于“推荐工具”的原因投票将其作为题外话关闭。但这条规则是因为据称推荐“吸引了固执己见的答案和垃圾邮件”。这个答案只是要求提供有关工具存在的信息(“Is there a tool”),答案显然在于事实领域:要么工具通过在
+和&操作与低优先级运算符一起出现或不出现。不要求任何自以为是的建议。
标签: c++ c operator-precedence deobfuscation