C/C++ 表达式运算符优先级的括号计算器

And*_*kha 2 c c++ operator-precedence deobfuscation

在将一些混淆的 C 代码移植到 C++(即Harm Geert Muller 的Fairy-Max国际象棋引擎)后,我收到了很多类似于以下的警告:

建议在 '&' [-Werror=parentheses] 的操作数中的比较周围加上括号

建议在“&”的操作数中将“+”括起来

虽然关闭警告不是一个选项,但解决方案是根据运算符优先级在表达式中添加括号。

例如:

if(z&S&&!ab&K==INF&d>2&v>V&v<Beta){
Run Code Online (Sandbox Code Playgroud)

需要改成这样:

if((z&S) && ((!ab)&(K==INF)&(d>2)&(v>V)&(v<Beta))) {
Run Code Online (Sandbox Code Playgroud)

但是手动执行此操作非常耗时。

我尝试使用这个clang-format内部使用的反混淆工具,但它没有在表达式中添加括号......

是否有一种工具(最好是在线的)可以将 C/C++ 表达式作为输入并返回一个无警告的等效表达式作为输出?

Lig*_*ica 5

乔迪可以做到

我一直想要一个网络版本,但上次我试图让 Geordi 在我的 VPS 上工作时,由于 Haskell 依赖 gubbins,我悲惨地失败了。有一天可以再试一次。

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

在您的案例中使用的工具的屏幕截图

  • @AndriyMakukha 我决定考虑将其移植到网络版本(只是优先部分),因为我相信它会非常受欢迎。 (2认同)