Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Disassembly Source for GDB #1237

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

WardenGnaw
Copy link
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 <_ZSt11_Hash_bytesPKvmm@got.plt>"
            },
            {
                "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 <_ZSt17__throw_bad_allocv@got.plt>"
            },
            {
                "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 <__cxa_begin_catch@got.plt>"
            },
            {
                "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 <memset@got.plt>"
            },
            {
                "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 <_ZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEm@got.plt>"
            },
            {
                "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 <_ZdlPv@got.plt>"
            },
            {
                "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 <_Znwm@got.plt>"
            },
            {
                "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 <_ZNSaIcED1Ev@got.plt>"
            },
            {
                "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 <__stack_chk_fail@got.plt>"
            },
            {
                "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 <strcmp@got.plt>"
            },
            {
                "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 <__cxa_rethrow@got.plt>"
            },
            {
                "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 <__cxa_end_catch@got.plt>"
            },
            {
                "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 <_Unwind_Resume@got.plt>"
            },
            {
                "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 <_ZNSaIcEC1Ev@got.plt>"
            },
            {
                "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
}

@gregg-miskelly
Copy link
Member

                }

Remove and start returning this flag correctly


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

@gregg-miskelly
Copy link
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
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
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
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
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
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.

// 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
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
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
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
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
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
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
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
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