组装展示台
Assembly Visualizer
我四处寻找了一个汇编可视化工具,了解 Regex 站点如何向您展示如何解释它,或者 BF(语言)可视化工具向您展示它是如何通过堆栈的,是否有类似这样的汇编某处在线?
Brainf**k 示例:
https://fatiherikli.github.io/brainfuck-visualizer/
与 BF 不同,真正的 CPU 汇编语言通常没有需要总结的大量重复指令;该指令本身已经是一个紧凑但可读的说明。如果你想要更高的级别,使用反编译器将其转换为 C。(通常能够识别循环并以类似 C 的方式编写它们,而不仅仅是 if()goto
用于 compare/branch 指令。)
更重要的是,大多数 asm 都不是一个完整的程序,它通常是一个以未知寄存器值作为输入的函数,因此在知道位置的层面上进行跟踪每个指针都指向 not 可能,不允许在 BF 可视化器示例中进行那种分析。 BF 只有一个“光标”,代码必须不断移动以处理多个“变量”,但 常规 asm 并没有那么糟糕,通常更接近 BF 可视化工具总结的水平.
一个好的反汇编程序(如 objconv
对 x86/x86-64)将显示分支目标,从而很可能识别循环(因为向后条件分支通常是循环)。
分支是使真正的 asm 比正则表达式或 BF 更难静态跟踪的另一件事。 BF 分支仅限于通过 [ ]
进行结构化嵌套,但 CPU asm 不是。
一个好的 asm 调试器将有办法向您显示寄存器,理想情况下突出显示自上次断点或单步以来发生变化的寄存器。您通常可以为内存配置相同的内容,最坏的情况是使用 display /8gx $rsp
等手动 GDB 命令在每次提示之前在 x86-64 上的堆栈指针上方显示 8 个 qwords(g = Giant,十六进制)。
因此您可以通过单步执行 asm 来了解发生了什么。
https://godbolt.org/ 编译器资源管理器的 asm window 将鼠标悬停在 x86 指令助记符上,并单行提醒它们的作用;如果您忘记了哪些寄存器是 cdq
或 idiv
.
等指令的隐式操作数,则很有用
我四处寻找了一个汇编可视化工具,了解 Regex 站点如何向您展示如何解释它,或者 BF(语言)可视化工具向您展示它是如何通过堆栈的,是否有类似这样的汇编某处在线?
Brainf**k 示例: https://fatiherikli.github.io/brainfuck-visualizer/
与 BF 不同,真正的 CPU 汇编语言通常没有需要总结的大量重复指令;该指令本身已经是一个紧凑但可读的说明。如果你想要更高的级别,使用反编译器将其转换为 C。(通常能够识别循环并以类似 C 的方式编写它们,而不仅仅是 if()goto
用于 compare/branch 指令。)
更重要的是,大多数 asm 都不是一个完整的程序,它通常是一个以未知寄存器值作为输入的函数,因此在知道位置的层面上进行跟踪每个指针都指向 not 可能,不允许在 BF 可视化器示例中进行那种分析。 BF 只有一个“光标”,代码必须不断移动以处理多个“变量”,但 常规 asm 并没有那么糟糕,通常更接近 BF 可视化工具总结的水平.
一个好的反汇编程序(如 objconv
对 x86/x86-64)将显示分支目标,从而很可能识别循环(因为向后条件分支通常是循环)。
分支是使真正的 asm 比正则表达式或 BF 更难静态跟踪的另一件事。 BF 分支仅限于通过 [ ]
进行结构化嵌套,但 CPU asm 不是。
一个好的 asm 调试器将有办法向您显示寄存器,理想情况下突出显示自上次断点或单步以来发生变化的寄存器。您通常可以为内存配置相同的内容,最坏的情况是使用 display /8gx $rsp
等手动 GDB 命令在每次提示之前在 x86-64 上的堆栈指针上方显示 8 个 qwords(g = Giant,十六进制)。
因此您可以通过单步执行 asm 来了解发生了什么。
https://godbolt.org/ 编译器资源管理器的 asm window 将鼠标悬停在 x86 指令助记符上,并单行提醒它们的作用;如果您忘记了哪些寄存器是 cdq
或 idiv
.