8.5 VM disassembler

VM コード逆アセンブラはインタープリター・システムではオプションですが、 フロント・エンドでのバグの検出(および VM インタープリターのバグと区別するため)に非常に役立つため、 開発およびメンテナンス中は強く推奨します。

Vmgen は、 file-disasm.i を生成することで VM コードの逆アセンブルをサポートします。 vmgen-ex/disasm.c と同様に、 このコードを関数にラップする必要があります。 このファイルはほぼそのまま使用できます。 ‘vm_A2B(a,b)’ や ‘vm_out’ や ‘printarg_type(value)’ に加えて、 上記で説明したように、 以下のマクロと変数が file-disasm.i で使用されます(あなたはこれらを定義する必要があります):

ip

この変数は、 現在の VM 命令のオペコードを指します。

IP IPTOS

IPTOS’ は現在の VM 命令の最初の引数であり、 ‘IP’ はそれを指します。 これはエンジンとまったく同じですが、 ここで ‘ip’ は VM 命令のオペコードを指します(エンジンとは対照的に、 ‘ip’ は次のセル、 またはさらにその 1 つ先のセルを指します)。

VM_IS_INST(Inst i, int n)

オペコード ‘i’ が VM 命令テーブルの ‘n’ 番目のエントリと同じかどうかをテストします。