Skip to content

Add support for Disassembly Source for GDB#1237

Draft
WardenGnaw wants to merge 6 commits intomainfrom
dev/waan/sourceDisassembly
Draft

Add support for Disassembly Source for GDB#1237
WardenGnaw wants to merge 6 commits intomainfrom
dev/waan/sourceDisassembly

Conversation

@WardenGnaw
Copy link
Copy Markdown
Member

@WardenGnaw WardenGnaw commented Nov 9, 2021

This PR adds Location and Line to Disassembly Response.

CTRL+F main.cpp for Source and Line filled out.

Example Response:

Disassemble Response
{
    "type": "response",
    "request_seq": 12,
    "success": true,
    "command": "disassemble",
    "body": {
        "instructions": [
            {
                "address": "0x00000000080010f0",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": ""
            },
            {
                "address": "0x00000000080010f4",
                "instructionBytes": "68 0c 00 00 00",
                "instruction": "push   0xc",
                "symbol": ""
            },
            {
                "address": "0x00000000080010f9",
                "instructionBytes": "f2 e9 21 ff ff ff",
                "instruction": "bnd jmp 0x8001020",
                "symbol": ""
            },
            {
                "address": "0x00000000080010ff",
                "instructionBytes": "90",
                "instruction": "nop",
                "symbol": ""
            },
            {
                "address": "0x0000000008001100",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": ""
            },
            {
                "address": "0x0000000008001104",
                "instructionBytes": "68 0d 00 00 00",
                "instruction": "push   0xd",
                "symbol": ""
            },
            {
                "address": "0x0000000008001109",
                "instructionBytes": "f2 e9 11 ff ff ff",
                "instruction": "bnd jmp 0x8001020",
                "symbol": ""
            },
            {
                "address": "0x000000000800110f",
                "instructionBytes": "90",
                "instruction": "nop",
                "symbol": ""
            },
            {
                "address": "0x0000000008001110",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": ""
            },
            {
                "address": "0x0000000008001114",
                "instructionBytes": "68 0e 00 00 00",
                "instruction": "push   0xe",
                "symbol": ""
            },
            {
                "address": "0x0000000008001119",
                "instructionBytes": "f2 e9 01 ff ff ff",
                "instruction": "bnd jmp 0x8001020",
                "symbol": ""
            },
            {
                "address": "0x000000000800111f",
                "instructionBytes": "90",
                "instruction": "nop",
                "symbol": ""
            },
            {
                "address": "0x0000000008001120",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": ""
            },
            {
                "address": "0x0000000008001124",
                "instructionBytes": "68 0f 00 00 00",
                "instruction": "push   0xf",
                "symbol": ""
            },
            {
                "address": "0x0000000008001129",
                "instructionBytes": "f2 e9 f1 fe ff ff",
                "instruction": "bnd jmp 0x8001020",
                "symbol": ""
            },
            {
                "address": "0x000000000800112f",
                "instructionBytes": "90",
                "instruction": "nop",
                "symbol": ""
            },
            {
                "address": "0x0000000008001130",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": ""
            },
            {
                "address": "0x0000000008001134",
                "instructionBytes": "68 10 00 00 00",
                "instruction": "push   0x10",
                "symbol": ""
            },
            {
                "address": "0x0000000008001139",
                "instructionBytes": "f2 e9 e1 fe ff ff",
                "instruction": "bnd jmp 0x8001020",
                "symbol": ""
            },
            {
                "address": "0x000000000800113f",
                "instructionBytes": "90",
                "instruction": "nop",
                "symbol": ""
            },
            {
                "address": "0x0000000008001140",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "__cxa_finalize@plt"
            },
            {
                "address": "0x0000000008001144",
                "instructionBytes": "f2 ff 25 85 5e 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5e85]        # 0x8006fd0"
            },
            {
                "address": "0x000000000800114b",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x0000000008001150",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "_ZSt11_Hash_bytesPKvmm@plt"
            },
            {
                "address": "0x0000000008001154",
                "instructionBytes": "f2 ff 25 ed 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5ded]        # 0x8006f48 <[email protected]>"
            },
            {
                "address": "0x000000000800115b",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x0000000008001160",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "_ZSt17__throw_bad_allocv@plt"
            },
            {
                "address": "0x0000000008001164",
                "instructionBytes": "f2 ff 25 e5 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5de5]        # 0x8006f50 <[email protected]>"
            },
            {
                "address": "0x000000000800116b",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x0000000008001170",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "__cxa_begin_catch@plt"
            },
            {
                "address": "0x0000000008001174",
                "instructionBytes": "f2 ff 25 dd 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5ddd]        # 0x8006f58 <[email protected]>"
            },
            {
                "address": "0x000000000800117b",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x0000000008001180",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "memset@plt"
            },
            {
                "address": "0x0000000008001184",
                "instructionBytes": "f2 ff 25 d5 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5dd5]        # 0x8006f60 <[email protected]>"
            },
            {
                "address": "0x000000000800118b",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x0000000008001190",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev@plt"
            },
            {
                "address": "0x0000000008001194",
                "instructionBytes": "f2 ff 25 cd 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5dcd]        # 0x8006f68 <_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev@got.plt>"
            },
            {
                "address": "0x000000000800119b",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x00000000080011a0",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "_ZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEm@plt"
            },
            {
                "address": "0x00000000080011a4",
                "instructionBytes": "f2 ff 25 c5 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5dc5]        # 0x8006f70 <[email protected]>"
            },
            {
                "address": "0x00000000080011ab",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x00000000080011b0",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "_ZdlPv@plt"
            },
            {
                "address": "0x00000000080011b4",
                "instructionBytes": "f2 ff 25 bd 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5dbd]        # 0x8006f78 <[email protected]>"
            },
            {
                "address": "0x00000000080011bb",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x00000000080011c0",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "_Znwm@plt"
            },
            {
                "address": "0x00000000080011c4",
                "instructionBytes": "f2 ff 25 b5 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5db5]        # 0x8006f80 <[email protected]>"
            },
            {
                "address": "0x00000000080011cb",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x00000000080011d0",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "_ZNSaIcED1Ev@plt"
            },
            {
                "address": "0x00000000080011d4",
                "instructionBytes": "f2 ff 25 ad 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5dad]        # 0x8006f88 <[email protected]>"
            },
            {
                "address": "0x00000000080011db",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x00000000080011e0",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "__stack_chk_fail@plt"
            },
            {
                "address": "0x00000000080011e4",
                "instructionBytes": "f2 ff 25 a5 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5da5]        # 0x8006f90 <[email protected]>"
            },
            {
                "address": "0x00000000080011eb",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x00000000080011f0",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "_ZNKSt8__detail20_Prime_rehash_policy14_M_need_rehashEmmm@plt"
            },
            {
                "address": "0x00000000080011f4",
                "instructionBytes": "f2 ff 25 9d 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5d9d]        # 0x8006f98 <_ZNKSt8__detail20_Prime_rehash_policy14_M_need_rehashEmmm@got.plt>"
            },
            {
                "address": "0x00000000080011fb",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x0000000008001200",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3_@plt"
            },
            {
                "address": "0x0000000008001204",
                "instructionBytes": "f2 ff 25 95 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5d95]        # 0x8006fa0 <_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3_@got.plt>"
            },
            {
                "address": "0x000000000800120b",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x0000000008001210",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "strcmp@plt"
            },
            {
                "address": "0x0000000008001214",
                "instructionBytes": "f2 ff 25 8d 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5d8d]        # 0x8006fa8 <[email protected]>"
            },
            {
                "address": "0x000000000800121b",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x0000000008001220",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "__cxa_rethrow@plt"
            },
            {
                "address": "0x0000000008001224",
                "instructionBytes": "f2 ff 25 85 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5d85]        # 0x8006fb0 <[email protected]>"
            },
            {
                "address": "0x000000000800122b",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x0000000008001230",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "__cxa_end_catch@plt"
            },
            {
                "address": "0x0000000008001234",
                "instructionBytes": "f2 ff 25 7d 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5d7d]        # 0x8006fb8 <[email protected]>"
            },
            {
                "address": "0x000000000800123b",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x0000000008001240",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "_Unwind_Resume@plt"
            },
            {
                "address": "0x0000000008001244",
                "instructionBytes": "f2 ff 25 75 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5d75]        # 0x8006fc0 <[email protected]>"
            },
            {
                "address": "0x000000000800124b",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x0000000008001250",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "_ZNSaIcEC1Ev@plt"
            },
            {
                "address": "0x0000000008001254",
                "instructionBytes": "f2 ff 25 6d 5d 00 00",
                "instruction": "bnd jmp QWORD PTR [rip+0x5d6d]        # 0x8006fc8 <[email protected]>"
            },
            {
                "address": "0x000000000800125b",
                "instructionBytes": "0f 1f 44 00 00",
                "instruction": "nop    DWORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x0000000008001260",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "_start"
            },
            {
                "address": "0x0000000008001264",
                "instructionBytes": "31 ed",
                "instruction": "xor    ebp,ebp"
            },
            {
                "address": "0x0000000008001266",
                "instructionBytes": "49 89 d1",
                "instruction": "mov    r9,rdx"
            },
            {
                "address": "0x0000000008001269",
                "instructionBytes": "5e",
                "instruction": "pop    rsi"
            },
            {
                "address": "0x000000000800126a",
                "instructionBytes": "48 89 e2",
                "instruction": "mov    rdx,rsp"
            },
            {
                "address": "0x000000000800126d",
                "instructionBytes": "48 83 e4 f0",
                "instruction": "and    rsp,0xfffffffffffffff0"
            },
            {
                "address": "0x0000000008001271",
                "instructionBytes": "50",
                "instruction": "push   rax"
            },
            {
                "address": "0x0000000008001272",
                "instructionBytes": "54",
                "instruction": "push   rsp"
            },
            {
                "address": "0x0000000008001273",
                "instructionBytes": "4c 8d 05 46 26 00 00",
                "instruction": "lea    r8,[rip+0x2646]        # 0x80038c0 <__libc_csu_fini>"
            },
            {
                "address": "0x000000000800127a",
                "instructionBytes": "48 8d 0d cf 25 00 00",
                "instruction": "lea    rcx,[rip+0x25cf]        # 0x8003850 <__libc_csu_init>"
            },
            {
                "address": "0x0000000008001281",
                "instructionBytes": "48 8d 3d c1 00 00 00",
                "instruction": "lea    rdi,[rip+0xc1]        # 0x8001349 <main(int, char**)>"
            },
            {
                "address": "0x0000000008001288",
                "instructionBytes": "ff 15 52 5d 00 00",
                "instruction": "call   QWORD PTR [rip+0x5d52]        # 0x8006fe0"
            },
            {
                "address": "0x000000000800128e",
                "instructionBytes": "f4",
                "instruction": "hlt    "
            },
            {
                "address": "0x000000000800128f",
                "instructionBytes": "90",
                "instruction": "nop",
                "symbol": ""
            },
            {
                "address": "0x0000000008001290",
                "instructionBytes": "48 8d 3d 81 5d 00 00",
                "instruction": "lea    rdi,[rip+0x5d81]        # 0x8007018 <completed.8059>",
                "symbol": "deregister_tm_clones"
            },
            {
                "address": "0x0000000008001297",
                "instructionBytes": "48 8d 05 7a 5d 00 00",
                "instruction": "lea    rax,[rip+0x5d7a]        # 0x8007018 <completed.8059>"
            },
            {
                "address": "0x000000000800129e",
                "instructionBytes": "48 39 f8",
                "instruction": "cmp    rax,rdi"
            },
            {
                "address": "0x00000000080012a1",
                "instructionBytes": "74 15",
                "instruction": "je     0x80012b8 <deregister_tm_clones+40>"
            },
            {
                "address": "0x00000000080012a3",
                "instructionBytes": "48 8b 05 2e 5d 00 00",
                "instruction": "mov    rax,QWORD PTR [rip+0x5d2e]        # 0x8006fd8"
            },
            {
                "address": "0x00000000080012aa",
                "instructionBytes": "48 85 c0",
                "instruction": "test   rax,rax"
            },
            {
                "address": "0x00000000080012ad",
                "instructionBytes": "74 09",
                "instruction": "je     0x80012b8 <deregister_tm_clones+40>"
            },
            {
                "address": "0x00000000080012af",
                "instructionBytes": "ff e0",
                "instruction": "jmp    rax"
            },
            {
                "address": "0x00000000080012b1",
                "instructionBytes": "0f 1f 80 00 00 00 00",
                "instruction": "nop    DWORD PTR [rax+0x0]"
            },
            {
                "address": "0x00000000080012b8",
                "instructionBytes": "c3",
                "instruction": "ret    "
            },
            {
                "address": "0x00000000080012b9",
                "instructionBytes": "0f 1f 80 00 00 00 00",
                "instruction": "nop    DWORD PTR [rax+0x0]"
            },
            {
                "address": "0x00000000080012c0",
                "instructionBytes": "48 8d 3d 51 5d 00 00",
                "instruction": "lea    rdi,[rip+0x5d51]        # 0x8007018 <completed.8059>",
                "symbol": "register_tm_clones"
            },
            {
                "address": "0x00000000080012c7",
                "instructionBytes": "48 8d 35 4a 5d 00 00",
                "instruction": "lea    rsi,[rip+0x5d4a]        # 0x8007018 <completed.8059>"
            },
            {
                "address": "0x00000000080012ce",
                "instructionBytes": "48 29 fe",
                "instruction": "sub    rsi,rdi"
            },
            {
                "address": "0x00000000080012d1",
                "instructionBytes": "48 89 f0",
                "instruction": "mov    rax,rsi"
            },
            {
                "address": "0x00000000080012d4",
                "instructionBytes": "48 c1 ee 3f",
                "instruction": "shr    rsi,0x3f"
            },
            {
                "address": "0x00000000080012d8",
                "instructionBytes": "48 c1 f8 03",
                "instruction": "sar    rax,0x3"
            },
            {
                "address": "0x00000000080012dc",
                "instructionBytes": "48 01 c6",
                "instruction": "add    rsi,rax"
            },
            {
                "address": "0x00000000080012df",
                "instructionBytes": "48 d1 fe",
                "instruction": "sar    rsi,1"
            },
            {
                "address": "0x00000000080012e2",
                "instructionBytes": "74 14",
                "instruction": "je     0x80012f8 <register_tm_clones+56>"
            },
            {
                "address": "0x00000000080012e4",
                "instructionBytes": "48 8b 05 05 5d 00 00",
                "instruction": "mov    rax,QWORD PTR [rip+0x5d05]        # 0x8006ff0"
            },
            {
                "address": "0x00000000080012eb",
                "instructionBytes": "48 85 c0",
                "instruction": "test   rax,rax"
            },
            {
                "address": "0x00000000080012ee",
                "instructionBytes": "74 08",
                "instruction": "je     0x80012f8 <register_tm_clones+56>"
            },
            {
                "address": "0x00000000080012f0",
                "instructionBytes": "ff e0",
                "instruction": "jmp    rax"
            },
            {
                "address": "0x00000000080012f2",
                "instructionBytes": "66 0f 1f 44 00 00",
                "instruction": "nop    WORD PTR [rax+rax*1+0x0]"
            },
            {
                "address": "0x00000000080012f8",
                "instructionBytes": "c3",
                "instruction": "ret    "
            },
            {
                "address": "0x00000000080012f9",
                "instructionBytes": "0f 1f 80 00 00 00 00",
                "instruction": "nop    DWORD PTR [rax+0x0]"
            },
            {
                "address": "0x0000000008001300",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "__do_global_dtors_aux"
            },
            {
                "address": "0x0000000008001304",
                "instructionBytes": "80 3d 0d 5d 00 00 00",
                "instruction": "cmp    BYTE PTR [rip+0x5d0d],0x0        # 0x8007018 <completed.8059>"
            },
            {
                "address": "0x000000000800130b",
                "instructionBytes": "75 2b",
                "instruction": "jne    0x8001338 <__do_global_dtors_aux+56>"
            },
            {
                "address": "0x000000000800130d",
                "instructionBytes": "55",
                "instruction": "push   rbp"
            },
            {
                "address": "0x000000000800130e",
                "instructionBytes": "48 83 3d ba 5c 00 00 00",
                "instruction": "cmp    QWORD PTR [rip+0x5cba],0x0        # 0x8006fd0"
            },
            {
                "address": "0x0000000008001316",
                "instructionBytes": "48 89 e5",
                "instruction": "mov    rbp,rsp"
            },
            {
                "address": "0x0000000008001319",
                "instructionBytes": "74 0c",
                "instruction": "je     0x8001327 <__do_global_dtors_aux+39>"
            },
            {
                "address": "0x000000000800131b",
                "instructionBytes": "48 8b 3d e6 5c 00 00",
                "instruction": "mov    rdi,QWORD PTR [rip+0x5ce6]        # 0x8007008"
            },
            {
                "address": "0x0000000008001322",
                "instructionBytes": "e8 19 fe ff ff",
                "instruction": "call   0x8001140 <__cxa_finalize@plt>"
            },
            {
                "address": "0x0000000008001327",
                "instructionBytes": "e8 64 ff ff ff",
                "instruction": "call   0x8001290 <deregister_tm_clones>"
            },
            {
                "address": "0x000000000800132c",
                "instructionBytes": "c6 05 e5 5c 00 00 01",
                "instruction": "mov    BYTE PTR [rip+0x5ce5],0x1        # 0x8007018 <completed.8059>"
            },
            {
                "address": "0x0000000008001333",
                "instructionBytes": "5d",
                "instruction": "pop    rbp"
            },
            {
                "address": "0x0000000008001334",
                "instructionBytes": "c3",
                "instruction": "ret    "
            },
            {
                "address": "0x0000000008001335",
                "instructionBytes": "0f 1f 00",
                "instruction": "nop    DWORD PTR [rax]"
            },
            {
                "address": "0x0000000008001338",
                "instructionBytes": "c3",
                "instruction": "ret    "
            },
            {
                "address": "0x0000000008001339",
                "instructionBytes": "0f 1f 80 00 00 00 00",
                "instruction": "nop    DWORD PTR [rax+0x0]"
            },
            {
                "address": "0x0000000008001340",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "frame_dummy"
            },
            {
                "address": "0x0000000008001344",
                "instructionBytes": "e9 77 ff ff ff",
                "instruction": "jmp    0x80012c0 <register_tm_clones>"
            },
            {
                "address": "0x0000000008001349",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "main(int, char**)",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 7
            },
            {
                "address": "0x000000000800134d",
                "instructionBytes": "55",
                "instruction": "push   rbp",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 7
            },
            {
                "address": "0x000000000800134e",
                "instructionBytes": "48 89 e5",
                "instruction": "mov    rbp,rsp",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 7
            },
            {
                "address": "0x0000000008001351",
                "instructionBytes": "41 55",
                "instruction": "push   r13",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 7
            },
            {
                "address": "0x0000000008001353",
                "instructionBytes": "41 54",
                "instruction": "push   r12",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 7
            },
            {
                "address": "0x0000000008001355",
                "instructionBytes": "53",
                "instruction": "push   rbx",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 7
            },
            {
                "address": "0x0000000008001356",
                "instructionBytes": "48 81 ec b8 00 00 00",
                "instruction": "sub    rsp,0xb8",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 7
            },
            {
                "address": "0x000000000800135d",
                "instructionBytes": "89 bd 3c ff ff ff",
                "instruction": "mov    DWORD PTR [rbp-0xc4],edi",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 7
            },
            {
                "address": "0x0000000008001363",
                "instructionBytes": "48 89 b5 30 ff ff ff",
                "instruction": "mov    QWORD PTR [rbp-0xd0],rsi",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 7
            },
            {
                "address": "0x000000000800136a",
                "instructionBytes": "64 48 8b 04 25 28 00 00 00",
                "instruction": "mov    rax,QWORD PTR fs:0x28",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 7
            },
            {
                "address": "0x0000000008001373",
                "instructionBytes": "48 89 45 d8",
                "instruction": "mov    QWORD PTR [rbp-0x28],rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 7
            },
            {
                "address": "0x0000000008001377",
                "instructionBytes": "31 c0",
                "instruction": "xor    eax,eax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 7
            },
            {
                "address": "0x0000000008001379",
                "instructionBytes": "c7 85 4c ff ff ff 00 00 00 00",
                "instruction": "mov    DWORD PTR [rbp-0xb4],0x0",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 8
            },
            {
                "address": "0x0000000008001383",
                "instructionBytes": "48 8d 85 50 ff ff ff",
                "instruction": "lea    rax,[rbp-0xb0]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x000000000800138a",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x000000000800138d",
                "instructionBytes": "e8 be fe ff ff",
                "instruction": "call   0x8001250 <_ZNSaIcEC1Ev@plt>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x0000000008001392",
                "instructionBytes": "48 8d 95 50 ff ff ff",
                "instruction": "lea    rdx,[rbp-0xb0]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x0000000008001399",
                "instructionBytes": "48 8d 45 90",
                "instruction": "lea    rax,[rbp-0x70]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x000000000800139d",
                "instructionBytes": "48 8d 35 6f 2c 00 00",
                "instruction": "lea    rsi,[rip+0x2c6f]        # 0x8004013",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x00000000080013a4",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x00000000080013a7",
                "instructionBytes": "e8 54 fe ff ff",
                "instruction": "call   0x8001200 <_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3_@plt>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x00000000080013ac",
                "instructionBytes": "48 8d 85 50 ff ff ff",
                "instruction": "lea    rax,[rbp-0xb0]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x00000000080013b3",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x00000000080013b6",
                "instructionBytes": "e8 15 fe ff ff",
                "instruction": "call   0x80011d0 <_ZNSaIcED1Ev@plt>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x00000000080013bb",
                "instructionBytes": "c7 85 44 ff ff ff 01 00 00 00",
                "instruction": "mov    DWORD PTR [rbp-0xbc],0x1",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 11
            },
            {
                "address": "0x00000000080013c5",
                "instructionBytes": "48 8d 95 44 ff ff ff",
                "instruction": "lea    rdx,[rbp-0xbc]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x00000000080013cc",
                "instructionBytes": "48 8d 45 b0",
                "instruction": "lea    rax,[rbp-0x50]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x00000000080013d0",
                "instructionBytes": "48 8d 35 29 59 00 00",
                "instruction": "lea    rsi,[rip+0x5929]        # 0x8006d00 <_ZTIi@@CXXABI_1.3>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x00000000080013d7",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x00000000080013da",
                "instructionBytes": "e8 1f 04 00 00",
                "instruction": "call   0x80017fe <std::pair<std::type_index const, int>::pair<std::type_info const&, int, true>(std::type_info const&, int&&)>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x00000000080013df",
                "instructionBytes": "c7 85 48 ff ff ff 02 00 00 00",
                "instruction": "mov    DWORD PTR [rbp-0xb8],0x2",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 12
            },
            {
                "address": "0x00000000080013e9",
                "instructionBytes": "48 8d 85 48 ff ff ff",
                "instruction": "lea    rax,[rbp-0xb8]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x00000000080013f0",
                "instructionBytes": "48 8d 55 b0",
                "instruction": "lea    rdx,[rbp-0x50]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x00000000080013f4",
                "instructionBytes": "48 8d 4a 10",
                "instruction": "lea    rcx,[rdx+0x10]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x00000000080013f8",
                "instructionBytes": "48 89 c2",
                "instruction": "mov    rdx,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x00000000080013fb",
                "instructionBytes": "48 8d 35 0e 59 00 00",
                "instruction": "lea    rsi,[rip+0x590e]        # 0x8006d10 <_ZTId@@CXXABI_1.3>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001402",
                "instructionBytes": "48 89 cf",
                "instruction": "mov    rdi,rcx",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001405",
                "instructionBytes": "e8 f4 03 00 00",
                "instruction": "call   0x80017fe <std::pair<std::type_index const, int>::pair<std::type_info const&, int, true>(std::type_info const&, int&&)>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x000000000800140a",
                "instructionBytes": "48 8d 45 b0",
                "instruction": "lea    rax,[rbp-0x50]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x000000000800140e",
                "instructionBytes": "49 89 c4",
                "instruction": "mov    r12,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001411",
                "instructionBytes": "41 bd 02 00 00 00",
                "instruction": "mov    r13d,0x2",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001417",
                "instructionBytes": "48 8d 85 43 ff ff ff",
                "instruction": "lea    rax,[rbp-0xbd]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x000000000800141e",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001421",
                "instructionBytes": "e8 7c 04 00 00",
                "instruction": "call   0x80018a2 <std::allocator<std::pair<std::type_index const, int> >::allocator()>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001426",
                "instructionBytes": "48 8d bd 42 ff ff ff",
                "instruction": "lea    rdi,[rbp-0xbe]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x000000000800142d",
                "instructionBytes": "48 8d b5 41 ff ff ff",
                "instruction": "lea    rsi,[rbp-0xbf]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001434",
                "instructionBytes": "4c 89 e1",
                "instruction": "mov    rcx,r12",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001437",
                "instructionBytes": "4c 89 eb",
                "instruction": "mov    rbx,r13",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x000000000800143a",
                "instructionBytes": "4c 89 e0",
                "instruction": "mov    rax,r12",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x000000000800143d",
                "instructionBytes": "4c 89 ea",
                "instruction": "mov    rdx,r13",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001440",
                "instructionBytes": "49 89 cb",
                "instruction": "mov    r11,rcx",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001443",
                "instructionBytes": "49 89 d2",
                "instruction": "mov    r10,rdx",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001446",
                "instructionBytes": "48 8d 85 50 ff ff ff",
                "instruction": "lea    rax,[rbp-0xb0]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x000000000800144d",
                "instructionBytes": "48 83 ec 08",
                "instruction": "sub    rsp,0x8",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001451",
                "instructionBytes": "48 8d 95 43 ff ff ff",
                "instruction": "lea    rdx,[rbp-0xbd]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001458",
                "instructionBytes": "52",
                "instruction": "push   rdx",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001459",
                "instructionBytes": "49 89 f9",
                "instruction": "mov    r9,rdi",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x000000000800145c",
                "instructionBytes": "49 89 f0",
                "instruction": "mov    r8,rsi",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x000000000800145f",
                "instructionBytes": "b9 00 00 00 00",
                "instruction": "mov    ecx,0x0",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001464",
                "instructionBytes": "4c 89 de",
                "instruction": "mov    rsi,r11",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001467",
                "instructionBytes": "4c 89 d2",
                "instruction": "mov    rdx,r10",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x000000000800146a",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x000000000800146d",
                "instructionBytes": "e8 70 04 00 00",
                "instruction": "call   0x80018e2 <std::unordered_map<std::type_index, int, std::hash<std::type_index>, std::equal_to<std::type_index>, std::allocator<std::pair<std::type_index const, int> > >::unordered_map(std::initializer_list<std::pair<std::type_index const, int> >, unsigned long, std::hash<std::type_index> const&, std::equal_to<std::type_index> const&, std::allocator<std::pair<std::type_index const, int> > const&)>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001472",
                "instructionBytes": "48 83 c4 10",
                "instruction": "add    rsp,0x10",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001476",
                "instructionBytes": "48 8d 85 43 ff ff ff",
                "instruction": "lea    rax,[rbp-0xbd]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x000000000800147d",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001480",
                "instructionBytes": "e8 3d 04 00 00",
                "instruction": "call   0x80018c2 <std::allocator<std::pair<std::type_index const, int> >::~allocator()>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 13
            },
            {
                "address": "0x0000000008001485",
                "instructionBytes": "83 bd 4c ff ff ff 00",
                "instruction": "cmp    DWORD PTR [rbp-0xb4],0x0",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 15
            },
            {
                "address": "0x000000000800148c",
                "instructionBytes": "75 07",
                "instruction": "jne    0x8001495 <main(int, char**)+332>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 15
            },
            {
                "address": "0x000000000800148e",
                "instructionBytes": "83 85 4c ff ff ff 01",
                "instruction": "add    DWORD PTR [rbp-0xb4],0x1",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 17
            },
            {
                "address": "0x0000000008001495",
                "instructionBytes": "83 bd 4c ff ff ff 01",
                "instruction": "cmp    DWORD PTR [rbp-0xb4],0x1",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 20
            },
            {
                "address": "0x000000000800149c",
                "instructionBytes": "75 07",
                "instruction": "jne    0x80014a5 <main(int, char**)+348>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 20
            },
            {
                "address": "0x000000000800149e",
                "instructionBytes": "83 ad 4c ff ff ff 01",
                "instruction": "sub    DWORD PTR [rbp-0xb4],0x1",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 22
            },
            {
                "address": "0x00000000080014a5",
                "instructionBytes": "83 ad 4c ff ff ff 01",
                "instruction": "sub    DWORD PTR [rbp-0xb4],0x1",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 27
            },
            {
                "address": "0x00000000080014ac",
                "instructionBytes": "eb f7",
                "instruction": "jmp    0x80014a5 <main(int, char**)+348>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 27
            },
            {
                "address": "0x00000000080014ae",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 27
            },
            {
                "address": "0x00000000080014b2",
                "instructionBytes": "48 89 c3",
                "instruction": "mov    rbx,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 27
            },
            {
                "address": "0x00000000080014b5",
                "instructionBytes": "48 8d 85 50 ff ff ff",
                "instruction": "lea    rax,[rbp-0xb0]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 27
            },
            {
                "address": "0x00000000080014bc",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 27
            },
            {
                "address": "0x00000000080014bf",
                "instructionBytes": "e8 0c fd ff ff",
                "instruction": "call   0x80011d0 <_ZNSaIcED1Ev@plt>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 27
            },
            {
                "address": "0x00000000080014c4",
                "instructionBytes": "48 89 d8",
                "instruction": "mov    rax,rbx",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 27
            },
            {
                "address": "0x00000000080014c7",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 27
            },
            {
                "address": "0x00000000080014ca",
                "instructionBytes": "e8 71 fd ff ff",
                "instruction": "call   0x8001240 <_Unwind_Resume@plt>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 27
            },
            {
                "address": "0x00000000080014cf",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 27
            },
            {
                "address": "0x00000000080014d3",
                "instructionBytes": "48 89 c3",
                "instruction": "mov    rbx,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 27
            },
            {
                "address": "0x00000000080014d6",
                "instructionBytes": "48 8d 85 43 ff ff ff",
                "instruction": "lea    rax,[rbp-0xbd]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 27
            },
            {
                "address": "0x00000000080014dd",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 27
            },
            {
                "address": "0x00000000080014e0",
                "instructionBytes": "e8 dd 03 00 00",
                "instruction": "call   0x80018c2 <std::allocator<std::pair<std::type_index const, int> >::~allocator()>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 27
            },
            {
                "address": "0x00000000080014e5",
                "instructionBytes": "48 8d 45 90",
                "instruction": "lea    rax,[rbp-0x70]",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x00000000080014e9",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x00000000080014ec",
                "instructionBytes": "e8 9f fc ff ff",
                "instruction": "call   0x8001190 <_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev@plt>",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x00000000080014f1",
                "instructionBytes": "48 89 d8",
                "instruction": "mov    rax,rbx",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x00000000080014f4",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/home/cpp/main.cpp",
                    "sources": [],
                    "checksums": []
                },
                "line": 9
            },
            {
                "address": "0x00000000080014f7",
                "instructionBytes": "e8 44 fd ff ff",
                "instruction": "call   0x8001240 <_Unwind_Resume@plt>"
            },
            {
                "address": "0x00000000080014fc",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "std::type_info::name() const",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 99
            },
            {
                "address": "0x0000000008001500",
                "instructionBytes": "55",
                "instruction": "push   rbp",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 99
            },
            {
                "address": "0x0000000008001501",
                "instructionBytes": "48 89 e5",
                "instruction": "mov    rbp,rsp",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 99
            },
            {
                "address": "0x0000000008001504",
                "instructionBytes": "48 89 7d f8",
                "instruction": "mov    QWORD PTR [rbp-0x8],rdi",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 99
            },
            {
                "address": "0x0000000008001508",
                "instructionBytes": "48 8b 45 f8",
                "instruction": "mov    rax,QWORD PTR [rbp-0x8]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 100
            },
            {
                "address": "0x000000000800150c",
                "instructionBytes": "48 8b 40 08",
                "instruction": "mov    rax,QWORD PTR [rax+0x8]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 100
            },
            {
                "address": "0x0000000008001510",
                "instructionBytes": "0f b6 00",
                "instruction": "movzx  eax,BYTE PTR [rax]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 100
            },
            {
                "address": "0x0000000008001513",
                "instructionBytes": "3c 2a",
                "instruction": "cmp    al,0x2a",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 100
            },
            {
                "address": "0x0000000008001515",
                "instructionBytes": "75 0e",
                "instruction": "jne    0x8001525 <std::type_info::name() const+41>",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 100
            },
            {
                "address": "0x0000000008001517",
                "instructionBytes": "48 8b 45 f8",
                "instruction": "mov    rax,QWORD PTR [rbp-0x8]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 100
            },
            {
                "address": "0x000000000800151b",
                "instructionBytes": "48 8b 40 08",
                "instruction": "mov    rax,QWORD PTR [rax+0x8]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 100
            },
            {
                "address": "0x000000000800151f",
                "instructionBytes": "48 83 c0 01",
                "instruction": "add    rax,0x1",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 100
            },
            {
                "address": "0x0000000008001523",
                "instructionBytes": "eb 08",
                "instruction": "jmp    0x800152d <std::type_info::name() const+49>",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 100
            },
            {
                "address": "0x0000000008001525",
                "instructionBytes": "48 8b 45 f8",
                "instruction": "mov    rax,QWORD PTR [rbp-0x8]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 100
            },
            {
                "address": "0x0000000008001529",
                "instructionBytes": "48 8b 40 08",
                "instruction": "mov    rax,QWORD PTR [rax+0x8]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 100
            },
            {
                "address": "0x000000000800152d",
                "instructionBytes": "5d",
                "instruction": "pop    rbp",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 100
            },
            {
                "address": "0x000000000800152e",
                "instructionBytes": "c3",
                "instruction": "ret    "
            },
            {
                "address": "0x000000000800152f",
                "instructionBytes": "90",
                "instruction": "nop",
                "symbol": ""
            },
            {
                "address": "0x0000000008001530",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "std::type_info::operator==(std::type_info const&) const",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 120
            },
            {
                "address": "0x0000000008001534",
                "instructionBytes": "55",
                "instruction": "push   rbp",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 120
            },
            {
                "address": "0x0000000008001535",
                "instructionBytes": "48 89 e5",
                "instruction": "mov    rbp,rsp",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 120
            },
            {
                "address": "0x0000000008001538",
                "instructionBytes": "48 83 ec 10",
                "instruction": "sub    rsp,0x10",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 120
            },
            {
                "address": "0x000000000800153c",
                "instructionBytes": "48 89 7d f8",
                "instruction": "mov    QWORD PTR [rbp-0x8],rdi",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 120
            },
            {
                "address": "0x0000000008001540",
                "instructionBytes": "48 89 75 f0",
                "instruction": "mov    QWORD PTR [rbp-0x10],rsi",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 120
            },
            {
                "address": "0x0000000008001544",
                "instructionBytes": "48 8b 45 f8",
                "instruction": "mov    rax,QWORD PTR [rbp-0x8]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 122
            },
            {
                "address": "0x0000000008001548",
                "instructionBytes": "48 8b 50 08",
                "instruction": "mov    rdx,QWORD PTR [rax+0x8]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 122
            },
            {
                "address": "0x000000000800154c",
                "instructionBytes": "48 8b 45 f0",
                "instruction": "mov    rax,QWORD PTR [rbp-0x10]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 122
            },
            {
                "address": "0x0000000008001550",
                "instructionBytes": "48 8b 40 08",
                "instruction": "mov    rax,QWORD PTR [rax+0x8]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 122
            },
            {
                "address": "0x0000000008001554",
                "instructionBytes": "48 39 c2",
                "instruction": "cmp    rdx,rax",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 123
            },
            {
                "address": "0x0000000008001557",
                "instructionBytes": "74 2e",
                "instruction": "je     0x8001587 <std::type_info::operator==(std::type_info const&) const+87>",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 123
            },
            {
                "address": "0x0000000008001559",
                "instructionBytes": "48 8b 45 f8",
                "instruction": "mov    rax,QWORD PTR [rbp-0x8]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 123
            },
            {
                "address": "0x000000000800155d",
                "instructionBytes": "48 8b 40 08",
                "instruction": "mov    rax,QWORD PTR [rax+0x8]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 123
            },
            {
                "address": "0x0000000008001561",
                "instructionBytes": "0f b6 00",
                "instruction": "movzx  eax,BYTE PTR [rax]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 123
            },
            {
                "address": "0x0000000008001564",
                "instructionBytes": "3c 2a",
                "instruction": "cmp    al,0x2a",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 123
            },
            {
                "address": "0x0000000008001566",
                "instructionBytes": "74 26",
                "instruction": "je     0x800158e <std::type_info::operator==(std::type_info const&) const+94>",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 123
            },
            {
                "address": "0x0000000008001568",
                "instructionBytes": "48 8b 45 f0",
                "instruction": "mov    rax,QWORD PTR [rbp-0x10]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 124
            },
            {
                "address": "0x000000000800156c",
                "instructionBytes": "48 8b 50 08",
                "instruction": "mov    rdx,QWORD PTR [rax+0x8]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 124
            },
            {
                "address": "0x0000000008001570",
                "instructionBytes": "48 8b 45 f8",
                "instruction": "mov    rax,QWORD PTR [rbp-0x8]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 124
            },
            {
                "address": "0x0000000008001574",
                "instructionBytes": "48 8b 40 08",
                "instruction": "mov    rax,QWORD PTR [rax+0x8]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 124
            },
            {
                "address": "0x0000000008001578",
                "instructionBytes": "48 89 d6",
                "instruction": "mov    rsi,rdx",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 124
            },
            {
                "address": "0x000000000800157b",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 124
            },
            {
                "address": "0x000000000800157e",
                "instructionBytes": "e8 8d fc ff ff",
                "instruction": "call   0x8001210 <strcmp@plt>",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 124
            },
            {
                "address": "0x0000000008001583",
                "instructionBytes": "85 c0",
                "instruction": "test   eax,eax",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 123
            },
            {
                "address": "0x0000000008001585",
                "instructionBytes": "75 07",
                "instruction": "jne    0x800158e <std::type_info::operator==(std::type_info const&) const+94>",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 123
            },
            {
                "address": "0x0000000008001587",
                "instructionBytes": "b8 01 00 00 00",
                "instruction": "mov    eax,0x1",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 123
            },
            {
                "address": "0x000000000800158c",
                "instructionBytes": "eb 05",
                "instruction": "jmp    0x8001593 <std::type_info::operator==(std::type_info const&) const+99>",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 123
            },
            {
                "address": "0x000000000800158e",
                "instructionBytes": "b8 00 00 00 00",
                "instruction": "mov    eax,0x0",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 123
            },
            {
                "address": "0x0000000008001593",
                "instructionBytes": "c9",
                "instruction": "leave  ",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 125
            },
            {
                "address": "0x0000000008001594",
                "instructionBytes": "c3",
                "instruction": "ret    "
            },
            {
                "address": "0x0000000008001595",
                "instructionBytes": "90",
                "instruction": "nop",
                "symbol": ""
            },
            {
                "address": "0x0000000008001596",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "std::type_info::hash_code() const",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 140
            },
            {
                "address": "0x000000000800159a",
                "instructionBytes": "55",
                "instruction": "push   rbp",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 140
            },
            {
                "address": "0x000000000800159b",
                "instructionBytes": "48 89 e5",
                "instruction": "mov    rbp,rsp",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 140
            },
            {
                "address": "0x000000000800159e",
                "instructionBytes": "53",
                "instruction": "push   rbx",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 140
            },
            {
                "address": "0x000000000800159f",
                "instructionBytes": "48 83 ec 18",
                "instruction": "sub    rsp,0x18",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 140
            },
            {
                "address": "0x00000000080015a3",
                "instructionBytes": "48 89 7d e8",
                "instruction": "mov    QWORD PTR [rbp-0x18],rdi",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 140
            },
            {
                "address": "0x00000000080015a7",
                "instructionBytes": "48 8b 45 e8",
                "instruction": "mov    rax,QWORD PTR [rbp-0x18]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015ab",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015ae",
                "instructionBytes": "e8 49 ff ff ff",
                "instruction": "call   0x80014fc <std::type_info::name() const>",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015b3",
                "instructionBytes": "48 c7 c1 ff ff ff ff",
                "instruction": "mov    rcx,0xffffffffffffffff",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015ba",
                "instructionBytes": "48 89 c2",
                "instruction": "mov    rdx,rax",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015bd",
                "instructionBytes": "b8 00 00 00 00",
                "instruction": "mov    eax,0x0",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015c2",
                "instructionBytes": "48 89 d7",
                "instruction": "mov    rdi,rdx",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015c5",
                "instructionBytes": "f2 ae",
                "instruction": "repnz scas al,BYTE PTR es:[rdi]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015c7",
                "instructionBytes": "48 89 c8",
                "instruction": "mov    rax,rcx",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015ca",
                "instructionBytes": "48 f7 d0",
                "instruction": "not    rax",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015cd",
                "instructionBytes": "48 8d 58 ff",
                "instruction": "lea    rbx,[rax-0x1]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015d1",
                "instructionBytes": "48 8b 45 e8",
                "instruction": "mov    rax,QWORD PTR [rbp-0x18]",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015d5",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015d8",
                "instructionBytes": "e8 1f ff ff ff",
                "instruction": "call   0x80014fc <std::type_info::name() const>",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015dd",
                "instructionBytes": "ba 07 69 0f c7",
                "instruction": "mov    edx,0xc70f6907",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015e2",
                "instructionBytes": "48 89 de",
                "instruction": "mov    rsi,rbx",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015e5",
                "instructionBytes": "48 89 c7",
                "instruction": "mov    rdi,rax",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015e8",
                "instructionBytes": "e8 63 fb ff ff",
                "instruction": "call   0x8001150 <_ZSt11_Hash_bytesPKvmm@plt>",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 143
            },
            {
                "address": "0x00000000080015ed",
                "instructionBytes": "48 83 c4 18",
                "instruction": "add    rsp,0x18",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 148
            },
            {
                "address": "0x00000000080015f1",
                "instructionBytes": "5b",
                "instruction": "pop    rbx",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 148
            },
            {
                "address": "0x00000000080015f2",
                "instructionBytes": "5d",
                "instruction": "pop    rbp",
                "location": {
                    "path": "/usr/include/c++/9/typeinfo",
                    "sources": [],
                    "checksums": []
                },
                "line": 148
            },
            {
                "address": "0x00000000080015f3",
                "instructionBytes": "c3",
                "instruction": "ret    "
            },
            {
                "address": "0x00000000080015f4",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "operator new(unsigned long, void*)",
                "location": {
                    "path": "/usr/include/c++/9/new",
                    "sources": [],
                    "checksums": []
                },
                "line": 174
            },
            {
                "address": "0x00000000080015f8",
                "instructionBytes": "55",
                "instruction": "push   rbp",
                "location": {
                    "path": "/usr/include/c++/9/new",
                    "sources": [],
                    "checksums": []
                },
                "line": 174
            },
            {
                "address": "0x00000000080015f9",
                "instructionBytes": "48 89 e5",
                "instruction": "mov    rbp,rsp",
                "location": {
                    "path": "/usr/include/c++/9/new",
                    "sources": [],
                    "checksums": []
                },
                "line": 174
            },
            {
                "address": "0x00000000080015fc",
                "instructionBytes": "48 89 7d f8",
                "instruction": "mov    QWORD PTR [rbp-0x8],rdi",
                "location": {
                    "path": "/usr/include/c++/9/new",
                    "sources": [],
                    "checksums": []
                },
                "line": 174
            },
            {
                "address": "0x0000000008001600",
                "instructionBytes": "48 89 75 f0",
                "instruction": "mov    QWORD PTR [rbp-0x10],rsi",
                "location": {
                    "path": "/usr/include/c++/9/new",
                    "sources": [],
                    "checksums": []
                },
                "line": 174
            },
            {
                "address": "0x0000000008001604",
                "instructionBytes": "48 8b 45 f0",
                "instruction": "mov    rax,QWORD PTR [rbp-0x10]",
                "location": {
                    "path": "/usr/include/c++/9/new",
                    "sources": [],
                    "checksums": []
                },
                "line": 174
            },
            {
                "address": "0x0000000008001608",
                "instructionBytes": "5d",
                "instruction": "pop    rbp",
                "location": {
                    "path": "/usr/include/c++/9/new",
                    "sources": [],
                    "checksums": []
                },
                "line": 174
            },
            {
                "address": "0x0000000008001609",
                "instructionBytes": "c3",
                "instruction": "ret    "
            },
            {
                "address": "0x000000000800160a",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "std::__detail::_Hash_node_base::_Hash_node_base()",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 218
            },
            {
                "address": "0x000000000800160e",
                "instructionBytes": "55",
                "instruction": "push   rbp",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 218
            },
            {
                "address": "0x000000000800160f",
                "instructionBytes": "48 89 e5",
                "instruction": "mov    rbp,rsp",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 218
            },
            {
                "address": "0x0000000008001612",
                "instructionBytes": "48 89 7d f8",
                "instruction": "mov    QWORD PTR [rbp-0x8],rdi",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 218
            },
            {
                "address": "0x0000000008001616",
                "instructionBytes": "48 8b 45 f8",
                "instruction": "mov    rax,QWORD PTR [rbp-0x8]",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 218
            },
            {
                "address": "0x000000000800161a",
                "instructionBytes": "48 c7 00 00 00 00 00",
                "instruction": "mov    QWORD PTR [rax],0x0",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 218
            },
            {
                "address": "0x0000000008001621",
                "instructionBytes": "90",
                "instruction": "nop",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 218
            },
            {
                "address": "0x0000000008001622",
                "instructionBytes": "5d",
                "instruction": "pop    rbp",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 218
            },
            {
                "address": "0x0000000008001623",
                "instructionBytes": "c3",
                "instruction": "ret    "
            },
            {
                "address": "0x0000000008001624",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "std::__detail::_Mod_range_hashing::operator()(unsigned long, unsigned long) const",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 431
            },
            {
                "address": "0x0000000008001628",
                "instructionBytes": "55",
                "instruction": "push   rbp",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 431
            },
            {
                "address": "0x0000000008001629",
                "instructionBytes": "48 89 e5",
                "instruction": "mov    rbp,rsp",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 431
            },
            {
                "address": "0x000000000800162c",
                "instructionBytes": "48 89 7d f8",
                "instruction": "mov    QWORD PTR [rbp-0x8],rdi",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 431
            },
            {
                "address": "0x0000000008001630",
                "instructionBytes": "48 89 75 f0",
                "instruction": "mov    QWORD PTR [rbp-0x10],rsi",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 431
            },
            {
                "address": "0x0000000008001634",
                "instructionBytes": "48 89 55 e8",
                "instruction": "mov    QWORD PTR [rbp-0x18],rdx",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 431
            },
            {
                "address": "0x0000000008001638",
                "instructionBytes": "48 8b 45 f0",
                "instruction": "mov    rax,QWORD PTR [rbp-0x10]",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 433
            },
            {
                "address": "0x000000000800163c",
                "instructionBytes": "ba 00 00 00 00",
                "instruction": "mov    edx,0x0",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 433
            },
            {
                "address": "0x0000000008001641",
                "instructionBytes": "48 f7 75 e8",
                "instruction": "div    QWORD PTR [rbp-0x18]",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 433
            },
            {
                "address": "0x0000000008001645",
                "instructionBytes": "48 89 d0",
                "instruction": "mov    rax,rdx",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 433
            },
            {
                "address": "0x0000000008001648",
                "instructionBytes": "5d",
                "instruction": "pop    rbp",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 433
            },
            {
                "address": "0x0000000008001649",
                "instructionBytes": "c3",
                "instruction": "ret    "
            },
            {
                "address": "0x000000000800164a",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "std::__detail::_Prime_rehash_policy::_Prime_rehash_policy(float)",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 449
            },
            {
                "address": "0x000000000800164e",
                "instructionBytes": "55",
                "instruction": "push   rbp",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 449
            },
            {
                "address": "0x000000000800164f",
                "instructionBytes": "48 89 e5",
                "instruction": "mov    rbp,rsp",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 449
            },
            {
                "address": "0x0000000008001652",
                "instructionBytes": "48 89 7d f8",
                "instruction": "mov    QWORD PTR [rbp-0x8],rdi",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 449
            },
            {
                "address": "0x0000000008001656",
                "instructionBytes": "f3 0f 11 45 f4",
                "instruction": "movss  DWORD PTR [rbp-0xc],xmm0",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 449
            },
            {
                "address": "0x000000000800165b",
                "instructionBytes": "48 8b 45 f8",
                "instruction": "mov    rax,QWORD PTR [rbp-0x8]",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 450
            },
            {
                "address": "0x000000000800165f",
                "instructionBytes": "f3 0f 10 45 f4",
                "instruction": "movss  xmm0,DWORD PTR [rbp-0xc]",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 450
            },
            {
                "address": "0x0000000008001664",
                "instructionBytes": "f3 0f 11 00",
                "instruction": "movss  DWORD PTR [rax],xmm0",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 450
            },
            {
                "address": "0x0000000008001668",
                "instructionBytes": "48 8b 45 f8",
                "instruction": "mov    rax,QWORD PTR [rbp-0x8]",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 450
            },
            {
                "address": "0x000000000800166c",
                "instructionBytes": "48 c7 40 08 00 00 00 00",
                "instruction": "mov    QWORD PTR [rax+0x8],0x0",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 450
            },
            {
                "address": "0x0000000008001674",
                "instructionBytes": "90",
                "instruction": "nop",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 450
            },
            {
                "address": "0x0000000008001675",
                "instructionBytes": "5d",
                "instruction": "pop    rbp",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 450
            },
            {
                "address": "0x0000000008001676",
                "instructionBytes": "c3",
                "instruction": "ret    "
            },
            {
                "address": "0x0000000008001677",
                "instructionBytes": "90",
                "instruction": "nop",
                "symbol": ""
            },
            {
                "address": "0x0000000008001678",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "std::__detail::_Prime_rehash_policy::_M_bkt_for_elements(unsigned long) const",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 462
            },
            {
                "address": "0x000000000800167c",
                "instructionBytes": "55",
                "instruction": "push   rbp",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 462
            },
            {
                "address": "0x000000000800167d",
                "instructionBytes": "48 89 e5",
                "instruction": "mov    rbp,rsp",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 462
            },
            {
                "address": "0x0000000008001680",
                "instructionBytes": "48 89 7d f8",
                "instruction": "mov    QWORD PTR [rbp-0x8],rdi",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 462
            },
            {
                "address": "0x0000000008001684",
                "instructionBytes": "48 89 75 f0",
                "instruction": "mov    QWORD PTR [rbp-0x10],rsi",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 462
            },
            {
                "address": "0x0000000008001688",
                "instructionBytes": "df 6d f0",
                "instruction": "fild   QWORD PTR [rbp-0x10]",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x000000000800168b",
                "instructionBytes": "48 83 7d f0 00",
                "instruction": "cmp    QWORD PTR [rbp-0x10],0x0",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x0000000008001690",
                "instructionBytes": "79 08",
                "instruction": "jns    0x800169a <std::__detail::_Prime_rehash_policy::_M_bkt_for_elements(unsigned long) const+34>",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x0000000008001692",
                "instructionBytes": "db 2d 88 29 00 00",
                "instruction": "fld    TBYTE PTR [rip+0x2988]        # 0x8004020",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x0000000008001698",
                "instructionBytes": "de c1",
                "instruction": "faddp  st(1),st",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x000000000800169a",
                "instructionBytes": "48 8b 45 f8",
                "instruction": "mov    rax,QWORD PTR [rbp-0x8]",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x000000000800169e",
                "instructionBytes": "f3 0f 10 28",
                "instruction": "movss  xmm5,DWORD PTR [rax]",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016a2",
                "instructionBytes": "f3 0f 11 6d e8",
                "instruction": "movss  DWORD PTR [rbp-0x18],xmm5",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016a7",
                "instructionBytes": "d9 45 e8",
                "instruction": "fld    DWORD PTR [rbp-0x18]",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016aa",
                "instructionBytes": "de f9",
                "instruction": "fdivp  st(1),st",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016ac",
                "instructionBytes": "dd 5d e8",
                "instruction": "fstp   QWORD PTR [rbp-0x18]",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016af",
                "instructionBytes": "f2 0f 10 65 e8",
                "instruction": "movsd  xmm4,QWORD PTR [rbp-0x18]",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016b4",
                "instructionBytes": "f2 0f 10 1d 74 29 00 00",
                "instruction": "movsd  xmm3,QWORD PTR [rip+0x2974]        # 0x8004030",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016bc",
                "instructionBytes": "66 0f 28 c4",
                "instruction": "movapd xmm0,xmm4",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016c0",
                "instructionBytes": "f3 0f 7e 0d 78 29 00 00",
                "instruction": "movq   xmm1,QWORD PTR [rip+0x2978]        # 0x8004040",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016c8",
                "instructionBytes": "66 0f 28 d1",
                "instruction": "movapd xmm2,xmm1",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016cc",
                "instructionBytes": "66 0f 28 c8",
                "instruction": "movapd xmm1,xmm0",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016d0",
                "instructionBytes": "66 0f 54 ca",
                "instruction": "andpd  xmm1,xmm2",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016d4",
                "instructionBytes": "66 0f 2e d9",
                "instruction": "ucomisd xmm3,xmm1",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016d8",
                "instructionBytes": "76 2b",
                "instruction": "jbe    0x8001705 <std::__detail::_Prime_rehash_policy::_M_bkt_for_elements(unsigned long) const+141>",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016da",
                "instructionBytes": "f2 48 0f 2c c0",
                "instruction": "cvttsd2si rax,xmm0",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016df",
                "instructionBytes": "f2 48 0f 2a c8",
                "instruction": "cvtsi2sd xmm1,rax",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016e4",
                "instructionBytes": "f2 0f 10 1d 64 29 00 00",
                "instruction": "movsd  xmm3,QWORD PTR [rip+0x2964]        # 0x8004050",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016ec",
                "instructionBytes": "f2 0f c2 c1 06",
                "instruction": "cmpnlesd xmm0,xmm1",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016f1",
                "instructionBytes": "66 0f 54 c3",
                "instruction": "andpd  xmm0,xmm3",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016f5",
                "instructionBytes": "f2 0f 58 c1",
                "instruction": "addsd  xmm0,xmm1",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016f9",
                "instructionBytes": "66 0f 55 d4",
                "instruction": "andnpd xmm2,xmm4",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x00000000080016fd",
                "instructionBytes": "66 0f 28 ca",
                "instruction": "movapd xmm1,xmm2",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x0000000008001701",
                "instructionBytes": "66 0f 56 c1",
                "instruction": "orpd   xmm0,xmm1",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x0000000008001705",
                "instructionBytes": "66 0f 2f 05 4b 29 00 00",
                "instruction": "comisd xmm0,QWORD PTR [rip+0x294b]        # 0x8004058",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x000000000800170d",
                "instructionBytes": "73 07",
                "instruction": "jae    0x8001716 <std::__detail::_Prime_rehash_policy::_M_bkt_for_elements(unsigned long) const+158>",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x000000000800170f",
                "instructionBytes": "f2 48 0f 2c c0",
                "instruction": "cvttsd2si rax,xmm0",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x0000000008001714",
                "instructionBytes": "eb 1e",
                "instruction": "jmp    0x8001734 <std::__detail::_Prime_rehash_policy::_M_bkt_for_elements(unsigned long) const+188>",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x0000000008001716",
                "instructionBytes": "f2 0f 10 0d 3a 29 00 00",
                "instruction": "movsd  xmm1,QWORD PTR [rip+0x293a]        # 0x8004058",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x000000000800171e",
                "instructionBytes": "f2 0f 5c c1",
                "instruction": "subsd  xmm0,xmm1",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x0000000008001722",
                "instructionBytes": "f2 48 0f 2c c0",
                "instruction": "cvttsd2si rax,xmm0",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x0000000008001727",
                "instructionBytes": "48 ba 00 00 00 00 00 00 00 80",
                "instruction": "movabs rdx,0x8000000000000000",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x0000000008001731",
                "instructionBytes": "48 31 d0",
                "instruction": "xor    rax,rdx",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x0000000008001734",
                "instructionBytes": "5d",
                "instruction": "pop    rbp",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 463
            },
            {
                "address": "0x0000000008001735",
                "instructionBytes": "c3",
                "instruction": "ret    "
            },
            {
                "address": "0x0000000008001736",
                "instructionBytes": "f3 0f 1e fa",
                "instruction": "endbr64 ",
                "symbol": "std::__detail::_Prime_rehash_policy::_M_state() const",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 476
            },
            {
                "address": "0x000000000800173a",
                "instructionBytes": "55",
                "instruction": "push   rbp",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 476
            },
            {
                "address": "0x000000000800173b",
                "instructionBytes": "48 89 e5",
                "instruction": "mov    rbp,rsp",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 476
            },
            {
                "address": "0x000000000800173e",
                "instructionBytes": "48 89 7d f8",
                "instruction": "mov    QWORD PTR [rbp-0x8],rdi",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 476
            },
            {
                "address": "0x0000000008001742",
                "instructionBytes": "48 8b 45 f8",
                "instruction": "mov    rax,QWORD PTR [rbp-0x8]",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 477
            },
            {
                "address": "0x0000000008001746",
                "instructionBytes": "48 8b 40 08",
                "instruction": "mov    rax,QWORD PTR [rax+0x8]",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 477
            },
            {
                "address": "0x000000000800174a",
                "instructionBytes": "5d",
                "instruction": "pop    rbp",
                "location": {
                    "path": "/usr/include/c++/9/bits/hashtable_policy.h",
                    "sources": [],
                    "checksums": []
                },
                "line": 477
            }
        ]
    },
    "seq": 2182
}

Comment thread src/MIDebugEngine/Engine.Impl/Disassembly.cs Outdated
Comment thread src/MIDebugEngine/Engine.Impl/Disassembly.cs Outdated
Comment thread src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs
Comment thread src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs
Comment thread src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs Outdated
Comment thread src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs
Comment thread src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs Outdated
Comment thread src/MIDebugEngine/Engine.Impl/Disassembly.cs Outdated
@gregg-miskelly
Copy link
Copy Markdown
Member

                }

Remove and start returning this flag correctly


Refers to: src/OpenDebugAD7/AD7DebugSession.cs:2072 in 31f3dac. [](commit_id = 31f3dac, deletion_comment = False)

Comment thread src/OpenDebugAD7/AD7DebugSession.cs Outdated
Comment thread src/OpenDebugAD7/AD7DebugSession.cs Outdated
Comment thread src/OpenDebugAD7/AD7DebugSession.cs
Comment thread src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs Outdated
Comment thread src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs Outdated
Comment thread src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs Outdated
Comment thread src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs
Comment thread src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs Outdated
@gregg-miskelly
Copy link
Copy Markdown
Member

        if (instructions == null || (instructions.First().Addr - _addr > dwInstructions))

Do you understand this condition? I would have thought it would be instructions.First().Addr != _addr


Refers to: src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs:122 in d63c422. [](commit_id = d63c422, deletion_comment = False)

@gregg-miskelly
Copy link
Copy Markdown
Member

gregg-miskelly commented Nov 17, 2021

            for (iOp = 0; iOp < dwInstructions; _addr++, ++iOp)

Need to handle skipping the first instruction in this path.

if (m_skipNextInstruction)
{
   _addr++;
   dwInstructions--;
   m_skipNextInstruction = false;
}

Refers to: src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs:125 in d63c422. [](commit_id = d63c422, deletion_comment = False)

@gregg-miskelly
Copy link
Copy Markdown
Member

gregg-miskelly commented Nov 17, 2021

            return Constants.S_OK;
m_lastSourceInfoStale = false;
m_dwLastSourceLine = 0;
_pLastDocument = null;

Refers to: src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs:130 in d63c422. [](commit_id = d63c422, deletion_comment = False)

@gregg-miskelly
Copy link
Copy Markdown
Member

        if (instructions == null || (instructions.First().Addr - _addr > dwInstructions))

Ah. Figured it out.


In reply to: 970990930


Refers to: src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs:122 in d63c422. [](commit_id = d63c422, deletion_comment = False)

@@ -118,52 +136,114 @@ public int Read(uint dwInstructions, enum_DISASSEMBLY_STREAM_FIELDS dwFields, ou
prgDisassembly[iOp] = FetchBadInstruction(dwFields);
}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You need a similar change here

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems like we could probably combine the two code paths together.

Comment thread src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs
Comment thread src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs Outdated
Comment thread src/MIDebugEngine/AD7.Impl/AD7Disassembly.cs Outdated
// If we have a new line and the current line is greater than the previously seen source line.
// Try to grab the last seen source line + 1 and show a group of source code.
// Else, just show the single line.
uint startLine = isNewLine && currentLine > _dwLastSourceLine ? _dwLastSourceLine + 1 : currentLine;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
uint startLine = isNewLine && currentLine > _dwLastSourceLine ? _dwLastSourceLine + 1 : currentLine;
uint startLine = isNewLine && !isNewDocument && currentLine > _dwLastSourceLine ? _dwLastSourceLine + 1 : currentLine;

@WardenGnaw WardenGnaw force-pushed the dev/waan/sourceDisassembly branch from 2f7a529 to b7870f5 Compare December 14, 2021 03:07
@WardenGnaw
Copy link
Copy Markdown
Member Author

WardenGnaw commented Jan 4, 2022

Based on godbolt, it looks like lines out of order is intended.
Should revert b7870f5

@WardenGnaw WardenGnaw added VS Visual Studio and removed VS Visual Studio labels Jan 5, 2022
@haneefdm
Copy link
Copy Markdown
Contributor

If it is alright, I can do a Pull Request for interleaving source in assembly. I had to do it for my own debugger and made similar changes to AD7. There are some unexpected gotchas in the parsing of the gdb MI results for mixed source/asm.

My changes are on https://github.com/haneefdm/MIEngine
disassembly

Will work with gdb version 8+ (Jun 4 2017) where they revamped (and deprecated) some of the ways disassembly is produced.

@haneefdm
Copy link
Copy Markdown
Contributor

I can't do a PR for MIEngine with this PR being outstanding. I looked at the files in this PR. There are a couple of things jump out at me. My changes are much simpler and not sure we have to worry about source lines being in order, etc. One thing missing (and should be fixed) in my changes however are calls to ConvertDebuggerLineToClient and ConvertDebuggerColumnToClient

My own debugger is here

https://github.com/Marus/cortex-debug/blob/master/src/backend/disasm.ts

I have two disassemblers in there and hoping to get rid of the old one and replace it with the new DAP protocol version so it can work nicely with the VSCode debug infrastructure.

@WardenGnaw
Copy link
Copy Markdown
Member Author

WardenGnaw commented Jan 10, 2022

@haneefdm One issue that came up with this feature was when requesting address ranges outside of the user's space or a huge size request, GDB would return with no source information, which required us to find each range per symbol and re-request disassembly from GDB.

It seemed like GDB would only return source information if it actually had matching symbol information, but at any point if it was missing, it would remove it from the whole data-disassemble response.

*/
foreach (TupleValue src_and_asm_line in src_and_asm_lines)
{
uint line = src_and_asm_line.FindUint("line");
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Watch out, this can fail (Exception) because "line" can be missing. When "line" is missing so will the "file" or "filename". I did it backwards. First I check for the file and if it exists and the line exists, then I call FindUnit("line"). It happens when a few instructions have source info but a few don't in the same addr-rane. If all don't have source-info, then there will be no src_and_asm_line either. My code looks like.

                    string file = process.GetMappedFileFromTuple(item);
                    uint line = !String.IsNullOrEmpty(file) && item.Contains("line") ? item.FindUint("line") : 0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, I see you are disassembling twice. I did not find that necessary, but you may have seen things I haven't. You can ignore my previous comment but I would still guard against not having file/source info in the middle of normal looking stuff.

@haneefdm
Copy link
Copy Markdown
Contributor

From what I saw, the request for source info (mode 4 or 5) degenerates into a request of request for mode 2. At least, the results will look like that. This just baffled me at first. This happens especially with bad/unknown memory regions and happened even within a proper memory region when source information was missing.

Yup, address ranges are a big problem. I am still experimenting with this, btw. I am reading gdb source code to confirm what I guessed -- lot left to read though. Also want to see what Ecliipse does. Here is what I plan to do in the short term for my debugger

  • Have a limit on a number of instructions (let us say 10K or something reasonable). The client can always chunk it up if they are serious. Anyone making huge requests, chances are it was a bug and also interferes with responsiveness -- what was their purpose? I know the DAP does not place limits, but I intend to. Perhaps as part of capabilities we can advertise the max request size.
  • Let gdb fail on getting the instructions that are outside of the memory range. This is another reason why we should be getting instructions in small chunks. Maybe later I can add code to find the true boundary.
  • My cases are embedded cases where I do have some information in the executable to know if the requests are venturing out of known boundaries.
  • In your case, you have native and remote cases but more than likely also using virtual memory.
  • For native programs, if you so wish, you can find out the extent(s) of the process allocated pages. For instance on Linux you can look at /proc/pid/maps. Not worth it I think
  • For remote programs (those involving a gdb-server) the options are even more limited.

The following does not work for native programs because technically the entire memory is the same and super large. So, no regions are defined.

(gdb) info mem
Using memory regions provided by the target.
Num Enb Low Addr   High Addr  Attrs 
0   y  	0x00000000 0x10000000 rw nocache 
1   y  	0x10000000 0x10100000 flash blocksize 0x200 nocache 
2   y  	0x10100000 0x14000000 rw nocache 
3   y  	0x14000000 0x14008000 flash blocksize 0x200 nocache 
4   y  	0x14008000 0x16000000 rw nocache 
5   y  	0x16000000 0x16008000 flash blocksize 0x200 nocache 
6   y  	0x16008000 0x90700000 rw nocache 
7   y  	0x90700000 0x90700400 flash blocksize 0x400 nocache 
8   y  	0x90700400 0x100000000 rw nocache 
(gdb)

The above is what is possible even if very little is used (actual boundaries). For the same executable, using objdump, I get the following which is what this executable is using. In your case, you won't know which memory region got mapped to which virtual one.

% arm-none-eabi-objdump -h build/CY8CKIT-062-WIFI-BT/Debug/mtb-example-psoc6-dual-cpu-ipc-pipes.elf

build/CY8CKIT-062-WIFI-BT/Debug/mtb-example-psoc6-dual-cpu-ipc-pipes.elf:     file format elf32-littlearm

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .cy_m0p_image 000025d4  10000000  10000000  00010000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .text         000093f8  10008000  10008000  00018000  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .ARM.exidx    00000008  100113f8  100113f8  000213f8  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .copy.table   00000018  10011400  10011400  00021400  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  4 .zero.table   00000008  10011418  10011418  00021418  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  5 .ramVectors   0000028c  08008000  08008000  000288a0  2**3
                  CONTENTS, READONLY
  6 .data         00000604  0800828c  10011420  0002828c  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  7 .cy_sharedmem 0000000c  08008890  10011a24  00028890  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  8 .noinit       00000094  080088a0  10011a38  000288a0  2**3
                  ALLOC
  9 .bss          00000434  08008934  10011acc  000288a0  2**2
                  ALLOC
 10 .heap         0003da98  08008d68  10011f00  000288a0  2**3
                  ALLOC, READONLY
 11 .stack_dummy  00001000  08046800  08046800  00028b30  2**3
                  CONTENTS, READONLY
 12 .ARM.attributes 0000002e  00000000  00000000  00029b30  2**0
                  CONTENTS, READONLY
 13 .comment      00000049  00000000  00000000  00029b5e  2**0
                  CONTENTS, READONLY
 14 .debug_line   0001b471  00000000  00000000  00029ba7  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 15 .debug_info   000611ec  00000000  00000000  00045018  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 16 .debug_abbrev 00005ef3  00000000  00000000  000a6204  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 17 .debug_aranges 00001740  00000000  00000000  000ac0f8  2**3
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 18 .debug_str    000206c8  00000000  00000000  000ad838  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 19 .debug_ranges 00002290  00000000  00000000  000cdf00  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 20 .debug_frame  00004e74  00000000  00000000  000d0190  2**2
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 21 .debug_loc    00017b87  00000000  00000000  000d5004  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 22 .stab         0000009c  00000000  00000000  000ecb8c  2**2
                  CONTENTS, READONLY, DEBUGGING
 23 .stabstr      0000014f  00000000  00000000  000ecc28  2**0
                  CONTENTS, READONLY, DEBUGGING
% 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants