Skip to content

Add support for Disassembly Source for GDB - #1237

Draft
Andrew Wang (WardenGnaw) wants to merge 6 commits into
mainfrom
dev/waan/sourceDisassembly
Draft

Add support for Disassembly Source for GDB#1237
Andrew Wang (WardenGnaw) wants to merge 6 commits into
mainfrom
dev/waan/sourceDisassembly

Conversation

@WardenGnaw

@WardenGnawAndrew Wang (WardenGnaw) commented Nov 9, 2021

Copy link
Copy Markdown
Member

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
}

Comment threadsrc/MIDebugEngine/Engine.Impl/Disassembly.cs Outdated
Comment threadsrc/MIDebugEngine/Engine.Impl/Disassembly.cs Outdated
Comment threadsrc/MIDebugEngine/AD7.Impl/AD7Disassembly.cs
Comment threadsrc/MIDebugEngine/AD7.Impl/AD7Disassembly.cs
Comment threadsrc/MIDebugEngine/AD7.Impl/AD7Disassembly.cs Outdated
Comment threadsrc/MIDebugEngine/AD7.Impl/AD7Disassembly.cs
Comment threadsrc/MIDebugEngine/AD7.Impl/AD7Disassembly.cs Outdated
Comment threadsrc/MIDebugEngine/Engine.Impl/Disassembly.cs Outdated
@gregg-miskelly

Copy link
Copy Markdown
Member
 }

Remove and start returning this flag correctly


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

Comment threadsrc/OpenDebugAD7/AD7DebugSession.cs Outdated
Comment threadsrc/OpenDebugAD7/AD7DebugSession.cs Outdated
Comment threadsrc/OpenDebugAD7/AD7DebugSession.cs
Comment threadsrc/MIDebugEngine/AD7.Impl/AD7Disassembly.cs Outdated
Comment threadsrc/MIDebugEngine/AD7.Impl/AD7Disassembly.cs Outdated
Comment threadsrc/MIDebugEngine/AD7.Impl/AD7Disassembly.cs Outdated
Comment threadsrc/MIDebugEngine/AD7.Impl/AD7Disassembly.cs
Comment threadsrc/MIDebugEngine/AD7.Impl/AD7Disassembly.cs Outdated
@gregg-miskelly

Copy link
Copy Markdown
Member
 if (instructions == null || (instructions.First().Addr - _addr > dwInstructions))

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


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

@gregg-miskelly

Gregg Miskelly (gregg-miskelly) commented Nov 17, 2021

Copy link
Copy Markdown
Member
 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

Gregg Miskelly (gregg-miskelly) commented Nov 17, 2021

Copy link
Copy Markdown
Member
 return Constants.S_OK;
m_lastSourceInfoStale = false;
m_dwLastSourceLine = 0;
_pLastDocument = null;

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

@gregg-miskelly

Copy link
Copy Markdown
Member
 if (instructions == null || (instructions.First().Addr - _addr > dwInstructions))

Ah. Figured it out.


In reply to: 970990930


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

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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

You need a similar change here

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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

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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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

@WardenGnaw

Andrew Wang (WardenGnaw) commented Jan 4, 2022

Copy link
Copy Markdown
MemberAuthor

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

@WardenGnawAndrew Wang (WardenGnaw) added VS Visual Studio and removed VS Visual Studio labels Jan 5, 2022
@haneefdm

Copy link
Copy Markdown
Contributor

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

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

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

@haneefdm

Copy link
Copy Markdown
Contributor

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

My own debugger is here

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

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

@WardenGnaw

Andrew Wang (WardenGnaw) commented Jan 10, 2022

Copy link
Copy Markdown
MemberAuthor

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

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

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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

@haneefdm

Copy link
Copy Markdown
Contributor

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

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

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

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

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

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

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

Sign up for freeto 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

@WardenGnaw@gregg-miskelly@haneefdm