【问题标题】:Parenthesis calculator for C/C++ expressions operator precedenceC/C++ 表达式运算符优先级的括号计算器
【发布时间】: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”),答案显然在于事实领域:要么工具通过在+&amp; 操作与低优先级运算符一起出现或不出现。不要求任何自以为是的建议。

标签: c++ c operator-precedence deobfuscation


【解决方案1】:

Geordi can do it.

我一直想要一个网页版本,但上次我试图让 Geordi 在我的 VPS 上工作时,由于 Haskell 依赖 gubbins,我惨遭失败。改天再试一次吧。

同时,您可以log onto Freenode IRC/msg geordi --precedence *p-&gt;data(例如)。您将打开一个带有结果的私人消息选项卡(例如*(p-&gt;data))。请随时在该选项卡中继续发送--precedence &lt;expression&gt; 请求。

【讨论】:

  • 谢谢!来自 Georgi 代码 x---------x = ((((x--)--)--)--)-x 的测试样本是一个完美的例子,说明了为什么应该存在这样的工具以及为什么它在反混淆中很有用。
  • @AndriyMakukha 我决定考虑将其移植到网络版本(只是优先部分),因为我相信它会很受欢迎。
猜你喜欢
  • 2021-10-04
  • 2020-06-23
  • 1970-01-01
  • 2013-02-24
  • 2017-06-02
  • 1970-01-01
  • 2021-03-29
  • 2013-07-31
相关资源
最近更新 更多