装配展示台

Jam*_*lsh 2 assembly reverse-engineering machine-code

我四处寻找一个程序集可视化工具,类似于正则表达式网站如何向您展示它的解释,或者 BF(语言)可视化工具向您展示它如何通过堆栈,在线某个地方是否有类似的程序集?

Brainfuck 示例: https: //fatiherikli.github.io/brainfuck-visualizer/

Pet*_*des 5

与 BF 不同,真正的 CPU 汇编语言通常没有大量需要汇总的重复指令;该指令本身已经是一个紧凑但可读的说明,说明了它的作用。如果您想要更高的级别,请使用反编译器将其转换为 C。(通常能够识别循环并以类似 C 的方式编写它们,而不仅仅是if()goto用于比较/分支指令。)

更重要的是,大多数 asm 并不知道是一个完整的程序,它通常是一个以未知寄存器值作为输入的函数,因此在知道每个指针指向哪里的级别上进行跟踪是不可能的,不允许进行这种分析BF 可视化示例。BF 只有一个“光标”,代码必须不断移动才能处理多个“变量”,但常规 asm 不会那么糟糕,并且通常更接近 BF 可视化器总结的水平。

一个好的反汇编器(例如objconvx86/x86-64)将显示分支目标,从而使识别循环变得相当可能(因为向后条件分支通常是循环)。

分支是另一个使真正的汇编比正则表达式或 BF 更难静态跟踪的因素。BF 分支仅限于通过 进行结构化嵌套[ ],但 CPU asm 则不然。


一个好的 asm 调试器将有办法向您显示寄存器,理想情况下突出显示自上次断点或单步以来发生更改的寄存器。您通常可以对内存进行相同的配置,最坏的情况是使用手动 GDB 命令,例如display /8gx $rsp在每次提示之前在 x86-64 上的堆栈指针上方显示 8 个 qword(g = Giant,十六进制)。

因此,您可以通过单步执行 asm 来跟踪发生的情况。

https://godbolt.org/编译器资源管理器的 asm 窗口将鼠标悬停在 x86 指令助记符上并带有一行提醒它们所做的事情;如果您忘记哪些寄存器是cdq或等指令的隐式操作数,则该操作很有用idiv