SBCLでdisassembleを用いてアセンブラ(?)を出力した時に番地などの詳細情報がでてきて
diffをとって比較するのが困難なので、ちょっと必要な部分だけを抽出してくれるawkスクリプトを書いてみました。
{ if(NF >= 5 && $3 ~ /.*:/) { print $3,$5,$6,$7 } else { if($6 ~ /;/) { print $4,$5 } else { print $4,$5,$6 } } }
ためしに通してみると
; disassembly for HOGE ; 02C7E279: 488B55F8 MOV RDX, [RBP-8] ; no-arg-parsing entry point ; 7D: BF08000000 MOV EDI, 8 ; 82: 488D0C25AF040020 LEA RCX, [#x200004AF] ; GENERIC-= ; 8A: FFD1 CALL RCX ; 8C: 7508 JNE L1 ; 8E: 31D2 XOR EDX, EDX ; 90: L0: 488BE5 MOV RSP, RBP ; 93: F8 CLC ; 94: 5D POP RBP ; 95: C3 RET ; 96: L1: 488B55F8 MOV RDX, [RBP-8] ; 9A: 31FF XOR EDI, EDI ; 9C: 488D0C25AF040020 LEA RCX, [#x200004AF] ; GENERIC-= ; A4: FFD1 CALL RCX ; A6: BA00000000 MOV EDX, 0 ; AB: 41BB08000000 MOV R11D, 8 ; B1: 490F44D3 CMOVEQ RDX, R11 ; B5: EBD9 JMP L0 ; B7: CC0A BREAK 10 ; error trap ; B9: 02 BYTE #X02 ; BA: 18 BYTE #X18 ; INVALID-ARG-COUNT-ERROR ; BB: 54 BYTE #X54 ; RCX
が
HOGE MOV RDX, [RBP-8] XOR EDI, EDI LEA RCX, [#x200004AF] CALL RCX JEQ L1 XOR EDX, EDX L0: MOV RSP, RBP CLC POP RBP RET L1: MOV RDX, [RBP-8] MOV EDI, 8 LEA RCX, [#x200004AF] CALL RCX MOV EDX, 8 MOV R11D, 0 CMOVEQ RDX, R11 JMP L0 BREAK 10 BYTE #X02 BYTE #X18 BYTE #X54
という風に出力されます。