Closed FalcoGer closed 4 years ago
Describe the bug r2dec crashes when trying to decompile main function of a simple program.
Component
Function Disassembly
[0x00001165]> pdf main ┌ 137: int main (int argc, char **argv, char **envp); │ ; var int64_t var_ch @ rbp-0xc │ ; var int64_t canary @ rbp-0x8 │ 0x00001165 push rbp │ 0x00001166 mov rbp, rsp │ 0x00001169 sub rsp, 0x10 │ 0x0000116d mov rax, qword fs:[0x28] │ 0x00001176 mov qword [canary], rax │ 0x0000117a xor eax, eax │ 0x0000117c lea rdi, str.Enter_your_key: ; 0x2008 ; const char *format │ 0x00001183 mov eax, 0 │ 0x00001188 call printf ; sym.imp.printf ; int printf(const char *format) │ 0x0000118d lea rax, [var_ch] │ 0x00001191 mov rsi, rax │ 0x00001194 lea rdi, [0x0000201a] ; const char *format │ 0x0000119b mov eax, 0 │ 0x000011a0 call __isoc99_scanf ; sym.imp.__isoc99_scanf ; int scanf(const char *format) │ 0x000011a5 mov eax, dword [var_ch] │ 0x000011a8 mov edi, eax ; int64_t arg1 │ 0x000011aa mov eax, 0 │ 0x000011af call validate_key ; sym.validate_key │ 0x000011b4 cmp eax, 1 │ ┌─< 0x000011b7 jne 0x11c7 │ │ 0x000011b9 lea rdi, str.Good_job_mate__now_go_keygen_me. ; 0x2020 ; const char *s │ │ 0x000011c0 call puts ; sym.imp.puts ; int puts(const char *s) │ ┌──< 0x000011c5 jmp 0x11d3 │ │└─> 0x000011c7 lea rdi, str.nope. ; 0x2041 ; const char *s │ │ 0x000011ce call puts ; sym.imp.puts ; int puts(const char *s) │ └──> 0x000011d3 mov eax, 0 │ 0x000011d8 mov rdx, qword [canary] │ 0x000011dc xor rdx, qword fs:[0x28] │ ┌─< 0x000011e5 je 0x11ec │ │ 0x000011e7 call __stack_chk_fail ; sym.imp.__stack_chk_fail ; void __stack_chk_fail(void) │ └─> 0x000011ec leave └ 0x000011ed ret
Reproduce via JSON (pddi)
{ "name": "issue_1588002705982", "arch": "x86", "archbits": 64, "agj": [ { "name": "main", "offset": 4453, "ninstr": 32, "nargs": 0, "nlocals": 2, "size": 137, "stack": 24, "type": "sym", "blocks": [ { "offset": 4453, "size": 84, "jump": 4551, "fail": 4537, "colorize": 0, "ops": [ { "offset": 4453, "esil": "rbp,8,rsp,-,=[8],8,rsp,-=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4589, "size": 1, "opcode": "push rbp", "disasm": "push rbp", "bytes": "55", "family": "cpu", "type": "rpush", "reloc": false, "type_num": 268435468, "type2_num": 0, "flags": [ "main", "sym.main" ], "xrefs": [ { "addr": 4253, "type": "DATA" } ] }, { "offset": 4454, "esil": "rsp,rbp,=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4587, "size": 3, "opcode": "mov rbp, rsp", "disasm": "mov rbp, rsp", "bytes": "4889e5", "family": "cpu", "type": "mov", "reloc": false, "type_num": 9, "type2_num": 0 }, { "offset": 4457, "val": 16, "esil": "16,rsp,-=,63,$o,of,:=,63,$s,sf,:=,$z,zf,:=,$p,pf,:=,64,$b,cf,:=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4586, "size": 4, "opcode": "sub rsp, 0x10", "disasm": "sub rsp, 0x10", "bytes": "4883ec10", "family": "cpu", "type": "sub", "reloc": false, "type_num": 18, "type2_num": 0 }, { "offset": 4461, "esil": "0x28,[8],rax,=", "refptr": true, "fcn_addr": 4453, "fcn_last": 4581, "size": 9, "opcode": "mov rax, qword fs:[0x28]", "disasm": "mov rax, qword fs:[0x28]", "bytes": "64488b042528000000", "family": "cpu", "type": "mov", "reloc": false, "type_num": 9, "type2_num": 0 }, { "offset": 4470, "esil": "rax,0x8,rbp,-,=[8]", "refptr": true, "fcn_addr": 4453, "fcn_last": 4586, "size": 4, "opcode": "mov qword [rbp - 8], rax", "disasm": "mov qword [canary], rax", "bytes": "488945f8", "family": "cpu", "type": "mov", "reloc": false, "type_num": 268435465, "type2_num": 0 }, { "offset": 4474, "esil": "eax,rax,^,0xffffffff,&,rax,=,$z,zf,:=,$p,pf,:=,31,$s,sf,:=,0,cf,:=,0,of,:=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4588, "size": 2, "opcode": "xor eax, eax", "disasm": "xor eax, eax", "bytes": "31c0", "family": "cpu", "type": "xor", "reloc": false, "type_num": 28, "type2_num": 0 }, { "offset": 4476, "ptr": 8200, "esil": "0xe85,rip,+,rdi,=", "refptr": true, "fcn_addr": 4453, "fcn_last": 4583, "size": 7, "opcode": "lea rdi, [rip + 0xe85]", "disasm": "lea rdi, str.Enter_your_key:", "bytes": "488d3d850e0000", "family": "cpu", "type": "lea", "reloc": false, "type_num": 33, "type2_num": 0, "refs": [ { "addr": 8200, "type": "DATA" } ] }, { "offset": 4483, "val": 0, "esil": "0,rax,=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4585, "size": 5, "opcode": "mov eax, 0", "disasm": "mov eax, 0", "bytes": "b800000000", "family": "cpu", "type": "mov", "reloc": false, "type_num": 9, "type2_num": 0 }, { "offset": 4488, "esil": "4176,rip,8,rsp,-=,rsp,=[],rip,=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4585, "size": 5, "opcode": "call 0x1050", "disasm": "call printf", "bytes": "e8c3feffff", "family": "cpu", "type": "call", "reloc": false, "type_num": 3, "type2_num": 0, "jump": 4176, "fail": 4493, "refs": [ { "addr": 4176, "type": "CALL" } ] }, { "offset": 4493, "esil": "0xc,rbp,-,rax,=", "refptr": true, "fcn_addr": 4453, "fcn_last": 4586, "size": 4, "opcode": "lea rax, [rbp - 0xc]", "disasm": "lea rax, [var_ch]", "bytes": "488d45f4", "family": "cpu", "type": "lea", "reloc": false, "type_num": 33, "type2_num": 0 }, { "offset": 4497, "esil": "rax,rsi,=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4587, "size": 3, "opcode": "mov rsi, rax", "disasm": "mov rsi, rax", "bytes": "4889c6", "family": "cpu", "type": "mov", "reloc": false, "type_num": 9, "type2_num": 0 }, { "offset": 4500, "ptr": 8218, "esil": "0xe7f,rip,+,rdi,=", "refptr": true, "fcn_addr": 4453, "fcn_last": 4583, "size": 7, "opcode": "lea rdi, [rip + 0xe7f]", "disasm": "lea rdi, [0x0000201a]", "bytes": "488d3d7f0e0000", "family": "cpu", "type": "lea", "reloc": false, "type_num": 33, "type2_num": 0, "refs": [ { "addr": 8218, "type": "DATA" } ] }, { "offset": 4507, "val": 0, "esil": "0,rax,=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4585, "size": 5, "opcode": "mov eax, 0", "disasm": "mov eax, 0", "bytes": "b800000000", "family": "cpu", "type": "mov", "reloc": false, "type_num": 9, "type2_num": 0 }, { "offset": 4512, "esil": "4192,rip,8,rsp,-=,rsp,=[],rip,=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4585, "size": 5, "opcode": "call 0x1060", "disasm": "call __isoc99_scanf", "bytes": "e8bbfeffff", "family": "cpu", "type": "call", "reloc": false, "type_num": 3, "type2_num": 0, "jump": 4192, "fail": 4517, "refs": [ { "addr": 4192, "type": "CALL" } ] }, { "offset": 4517, "esil": "0xc,rbp,-,[4],rax,=", "refptr": true, "fcn_addr": 4453, "fcn_last": 4587, "size": 3, "opcode": "mov eax, dword [rbp - 0xc]", "disasm": "mov eax, dword [var_ch]", "bytes": "8b45f4", "family": "cpu", "type": "mov", "reloc": false, "type_num": 9, "type2_num": 0 }, { "offset": 4520, "esil": "eax,rdi,=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4588, "size": 2, "opcode": "mov edi, eax", "disasm": "mov edi, eax", "bytes": "89c7", "family": "cpu", "type": "mov", "reloc": false, "type_num": 9, "type2_num": 0 }, { "offset": 4522, "val": 0, "esil": "0,rax,=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4585, "size": 5, "opcode": "mov eax, 0", "disasm": "mov eax, 0", "bytes": "b800000000", "family": "cpu", "type": "mov", "reloc": false, "type_num": 9, "type2_num": 0 }, { "offset": 4527, "esil": "4590,rip,8,rsp,-=,rsp,=[],rip,=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4585, "size": 5, "opcode": "call 0x11ee", "disasm": "call validate_key", "bytes": "e83a000000", "family": "cpu", "type": "call", "reloc": false, "type_num": 3, "type2_num": 0, "jump": 4590, "fail": 4532, "refs": [ { "addr": 4590, "type": "CALL" } ] }, { "offset": 4532, "ptr": 1, "val": 1, "esil": "1,eax,==,$z,zf,:=,32,$b,cf,:=,$p,pf,:=,31,$s,sf,:=,31,$o,of,:=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4587, "size": 3, "opcode": "cmp eax, 1", "disasm": "cmp eax, 1", "bytes": "83f801", "family": "cpu", "type": "cmp", "reloc": false, "type_num": 15, "type2_num": 0, "refs": [ { "addr": 1, "type": "DATA" } ] }, { "offset": 4535, "esil": "zf,!,?{,4551,rip,=,}", "refptr": false, "fcn_addr": 4453, "fcn_last": 4588, "size": 2, "opcode": "jne 0x11c7", "disasm": "jne 0x11c7", "bytes": "750e", "family": "cpu", "type": "cjmp", "reloc": false, "type_num": 2147483649, "type2_num": 0, "jump": 4551, "fail": 4537, "refs": [ { "addr": 4551, "type": "CODE" } ] } ] }, { "offset": 4537, "size": 14, "jump": 4563, "colorize": 0, "ops": [ { "offset": 4537, "ptr": 8224, "esil": "0xe60,rip,+,rdi,=", "refptr": true, "fcn_addr": 4453, "fcn_last": 4583, "size": 7, "opcode": "lea rdi, [rip + 0xe60]", "disasm": "lea rdi, str.Good_job_mate__now_go_keygen_me.", "bytes": "488d3d600e0000", "family": "cpu", "type": "lea", "reloc": false, "type_num": 33, "type2_num": 0, "refs": [ { "addr": 8224, "type": "DATA" } ] }, { "offset": 4544, "esil": "4144,rip,8,rsp,-=,rsp,=[],rip,=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4585, "size": 5, "opcode": "call 0x1030", "disasm": "call puts", "bytes": "e86bfeffff", "family": "cpu", "type": "call", "reloc": false, "type_num": 3, "type2_num": 0, "jump": 4144, "fail": 4549, "refs": [ { "addr": 4144, "type": "CALL" } ] }, { "offset": 4549, "esil": "0x11d3,rip,=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4588, "size": 2, "opcode": "jmp 0x11d3", "disasm": "jmp 0x11d3", "bytes": "eb0c", "family": "cpu", "type": "jmp", "reloc": false, "type_num": 1, "type2_num": 0, "jump": 4563, "refs": [ { "addr": 4563, "type": "CODE" } ] } ] }, { "offset": 4551, "size": 12, "jump": 4563, "colorize": 0, "ops": [ { "offset": 4551, "ptr": 8257, "esil": "0xe73,rip,+,rdi,=", "refptr": true, "fcn_addr": 4453, "fcn_last": 4583, "size": 7, "opcode": "lea rdi, [rip + 0xe73]", "disasm": "lea rdi, str.nope.", "bytes": "488d3d730e0000", "family": "cpu", "type": "lea", "reloc": false, "type_num": 33, "type2_num": 0, "refs": [ { "addr": 8257, "type": "DATA" } ], "xrefs": [ { "addr": 4535, "type": "CODE" } ] }, { "offset": 4558, "esil": "4144,rip,8,rsp,-=,rsp,=[],rip,=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4585, "size": 5, "opcode": "call 0x1030", "disasm": "call puts", "bytes": "e85dfeffff", "family": "cpu", "type": "call", "reloc": false, "type_num": 3, "type2_num": 0, "jump": 4144, "fail": 4563, "refs": [ { "addr": 4144, "type": "CALL" } ] } ] }, { "offset": 4563, "size": 20, "jump": 4588, "fail": 4583, "colorize": 0, "ops": [ { "offset": 4563, "val": 0, "esil": "0,rax,=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4585, "size": 5, "opcode": "mov eax, 0", "disasm": "mov eax, 0", "bytes": "b800000000", "family": "cpu", "type": "mov", "reloc": false, "type_num": 9, "type2_num": 0, "xrefs": [ { "addr": 4549, "type": "CODE" } ] }, { "offset": 4568, "esil": "0x8,rbp,-,[8],rdx,=", "refptr": true, "fcn_addr": 4453, "fcn_last": 4586, "size": 4, "opcode": "mov rdx, qword [rbp - 8]", "disasm": "mov rdx, qword [canary]", "bytes": "488b55f8", "family": "cpu", "type": "mov", "reloc": false, "type_num": 9, "type2_num": 0 }, { "offset": 4572, "esil": "0x28,[8],rdx,^=,$z,zf,:=,$p,pf,:=,63,$s,sf,:=,0,cf,:=,0,of,:=", "refptr": true, "fcn_addr": 4453, "fcn_last": 4581, "size": 9, "opcode": "xor rdx, qword fs:[0x28]", "disasm": "xor rdx, qword fs:[0x28]", "bytes": "644833142528000000", "family": "cpu", "type": "xor", "reloc": false, "type_num": 28, "type2_num": 0 }, { "offset": 4581, "esil": "zf,?{,4588,rip,=,}", "refptr": false, "fcn_addr": 4453, "fcn_last": 4588, "size": 2, "opcode": "je 0x11ec", "disasm": "je 0x11ec", "bytes": "7405", "family": "cpu", "type": "cjmp", "reloc": false, "type_num": 2147483649, "type2_num": 0, "jump": 4588, "fail": 4583, "refs": [ { "addr": 4588, "type": "CODE" } ] } ] }, { "offset": 4583, "size": 5, "colorize": 0, "ops": [ { "offset": 4583, "esil": "4160,rip,8,rsp,-=,rsp,=[],rip,=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4585, "size": 5, "opcode": "call 0x1040", "disasm": "call __stack_chk_fail", "bytes": "e854feffff", "family": "cpu", "type": "call", "reloc": false, "type_num": 3, "type2_num": 0, "jump": 4160, "fail": 4588, "refs": [ { "addr": 4160, "type": "CALL" } ] } ] }, { "offset": 4588, "size": 2, "colorize": 0, "ops": [ { "offset": 4588, "esil": "rbp,rsp,=,rsp,[8],rbp,=,8,rsp,+=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4589, "size": 1, "opcode": "leave", "disasm": "leave", "bytes": "c9", "family": "cpu", "type": "pop", "reloc": false, "type_num": 14, "type2_num": 0, "xrefs": [ { "addr": 4581, "type": "CODE" } ] }, { "offset": 4589, "esil": "rsp,[8],rip,=,8,rsp,+=", "refptr": false, "fcn_addr": 4453, "fcn_last": 4589, "size": 1, "opcode": "ret", "disasm": "ret", "bytes": "c3", "family": "cpu", "type": "ret", "reloc": false, "type_num": 5, "type2_num": 0 } ] } ] } ], "isj": [ { "name": ".interp", "flagname": "sym..interp", "realname": ".interp", "ordinal": 1, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 680, "paddr": 680, "is_imported": false }, { "name": ".note.gnu.build-id", "flagname": "sym..note.gnu.build_id", "realname": ".note.gnu.build-id", "ordinal": 2, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 708, "paddr": 708, "is_imported": false }, { "name": ".note.ABI-tag", "flagname": "sym..note.ABI_tag", "realname": ".note.ABI-tag", "ordinal": 3, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 744, "paddr": 744, "is_imported": false }, { "name": ".gnu.hash", "flagname": "sym..gnu.hash", "realname": ".gnu.hash", "ordinal": 4, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 776, "paddr": 776, "is_imported": false }, { "name": ".dynsym", "flagname": "sym..dynsym", "realname": ".dynsym", "ordinal": 5, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 816, "paddr": 816, "is_imported": false }, { "name": ".dynstr", "flagname": "sym..dynstr", "realname": ".dynstr", "ordinal": 6, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 1056, "paddr": 1056, "is_imported": false }, { "name": ".gnu.version", "flagname": "sym..gnu.version", "realname": ".gnu.version", "ordinal": 7, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 1246, "paddr": 1246, "is_imported": false }, { "name": ".gnu.version_r", "flagname": "sym..gnu.version_r", "realname": ".gnu.version_r", "ordinal": 8, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 1272, "paddr": 1272, "is_imported": false }, { "name": ".rela.dyn", "flagname": "sym..rela.dyn", "realname": ".rela.dyn", "ordinal": 9, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 1336, "paddr": 1336, "is_imported": false }, { "name": ".rela.plt", "flagname": "sym..rela.plt", "realname": ".rela.plt", "ordinal": 10, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 1528, "paddr": 1528, "is_imported": false }, { "name": ".init", "flagname": "sym..init", "realname": ".init", "ordinal": 11, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 4096, "paddr": 4096, "is_imported": false }, { "name": ".plt", "flagname": "sym..plt", "realname": ".plt", "ordinal": 12, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 4128, "paddr": 4128, "is_imported": false }, { "name": ".plt.got", "flagname": "sym..plt.got", "realname": ".plt.got", "ordinal": 13, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 4208, "paddr": 4208, "is_imported": false }, { "name": ".text", "flagname": "sym..text", "realname": ".text", "ordinal": 14, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 4224, "paddr": 4224, "is_imported": false }, { "name": ".fini", "flagname": "sym..fini", "realname": ".fini", "ordinal": 15, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 4756, "paddr": 4756, "is_imported": false }, { "name": ".rodata", "flagname": "sym..rodata", "realname": ".rodata", "ordinal": 16, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 8192, "paddr": 8192, "is_imported": false }, { "name": ".eh_frame_hdr", "flagname": "sym..eh_frame_hdr", "realname": ".eh_frame_hdr", "ordinal": 17, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 8264, "paddr": 8264, "is_imported": false }, { "name": ".eh_frame", "flagname": "sym..eh_frame", "realname": ".eh_frame", "ordinal": 18, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 8336, "paddr": 8336, "is_imported": false }, { "name": ".init_array", "flagname": "sym..init_array", "realname": ".init_array", "ordinal": 19, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 15776, "paddr": 11680, "is_imported": false }, { "name": ".fini_array", "flagname": "sym..fini_array", "realname": ".fini_array", "ordinal": 20, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 15784, "paddr": 11688, "is_imported": false }, { "name": ".dynamic", "flagname": "sym..dynamic", "realname": ".dynamic", "ordinal": 21, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 15792, "paddr": 11696, "is_imported": false }, { "name": ".got", "flagname": "sym..got", "realname": ".got", "ordinal": 22, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 16288, "paddr": 12192, "is_imported": false }, { "name": ".data", "flagname": "sym..data", "realname": ".data", "ordinal": 23, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 16384, "paddr": 12288, "is_imported": false }, { "name": ".bss", "flagname": "sym..bss", "realname": ".bss", "ordinal": 24, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 16400, "paddr": 18446744073709551615, "is_imported": false }, { "name": ".comment", "flagname": "sym..comment", "realname": ".comment", "ordinal": 25, "bind": "LOCAL", "size": 0, "type": "SECT", "vaddr": 0, "paddr": 0, "is_imported": false }, { "name": "crtstuff.c", "flagname": "sym.crtstuff.c", "realname": "crtstuff.c", "ordinal": 26, "bind": "LOCAL", "size": 0, "type": "FILE", "vaddr": 0, "paddr": 0, "is_imported": false }, { "name": "deregister_tm_clones", "flagname": "sym.deregister_tm_clones", "realname": "deregister_tm_clones", "ordinal": 27, "bind": "LOCAL", "size": 0, "type": "FUNC", "vaddr": 4272, "paddr": 4272, "is_imported": false }, { "name": "register_tm_clones", "flagname": "sym.register_tm_clones", "realname": "register_tm_clones", "ordinal": 28, "bind": "LOCAL", "size": 0, "type": "FUNC", "vaddr": 4320, "paddr": 4320, "is_imported": false }, { "name": "__do_global_dtors_aux", "flagname": "sym.__do_global_dtors_aux", "realname": "__do_global_dtors_aux", "ordinal": 29, "bind": "LOCAL", "size": 0, "type": "FUNC", "vaddr": 4384, "paddr": 4384, "is_imported": false }, { "name": "completed.7963", "flagname": "obj.completed.7963", "realname": "completed.7963", "ordinal": 30, "bind": "LOCAL", "size": 1, "type": "OBJ", "vaddr": 16400, "paddr": 18446744073709551615, "is_imported": false }, { "name": "__do_global_dtors_aux_fini_array_entry", "flagname": "obj.__do_global_dtors_aux_fini_array_entry", "realname": "__do_global_dtors_aux_fini_array_entry", "ordinal": 31, "bind": "LOCAL", "size": 0, "type": "OBJ", "vaddr": 15784, "paddr": 11688, "is_imported": false }, { "name": "frame_dummy", "flagname": "sym.frame_dummy", "realname": "frame_dummy", "ordinal": 32, "bind": "LOCAL", "size": 0, "type": "FUNC", "vaddr": 4448, "paddr": 4448, "is_imported": false }, { "name": "__frame_dummy_init_array_entry", "flagname": "obj.__frame_dummy_init_array_entry", "realname": "__frame_dummy_init_array_entry", "ordinal": 33, "bind": "LOCAL", "size": 0, "type": "OBJ", "vaddr": 15776, "paddr": 11680, "is_imported": false }, { "name": "keyg3nm3.c", "flagname": "sym.keyg3nm3.c", "realname": "keyg3nm3.c", "ordinal": 34, "bind": "LOCAL", "size": 0, "type": "FILE", "vaddr": 0, "paddr": 0, "is_imported": false }, { "name": "crtstuff.c", "flagname": "sym.crtstuff.c", "realname": "crtstuff.c", "ordinal": 35, "bind": "LOCAL", "size": 0, "type": "FILE", "vaddr": 0, "paddr": 0, "is_imported": false }, { "name": "__FRAME_END__", "flagname": "obj.__FRAME_END", "realname": "__FRAME_END__", "ordinal": 36, "bind": "LOCAL", "size": 0, "type": "OBJ", "vaddr": 8628, "paddr": 8628, "is_imported": false }, { "name": "", "flagname": "sym.", "realname": "", "ordinal": 37, "bind": "LOCAL", "size": 0, "type": "FILE", "vaddr": 0, "paddr": 0, "is_imported": false }, { "name": "__init_array_end", "flagname": "loc.__init_array_end", "realname": "__init_array_end", "ordinal": 38, "bind": "LOCAL", "size": 0, "type": "NOTYPE", "vaddr": 15784, "paddr": 11688, "is_imported": false }, { "name": "_DYNAMIC", "flagname": "obj._DYNAMIC", "realname": "_DYNAMIC", "ordinal": 39, "bind": "LOCAL", "size": 0, "type": "OBJ", "vaddr": 15792, "paddr": 11696, "is_imported": false }, { "name": "__init_array_start", "flagname": "loc.__init_array_start", "realname": "__init_array_start", "ordinal": 40, "bind": "LOCAL", "size": 0, "type": "NOTYPE", "vaddr": 15776, "paddr": 11680, "is_imported": false }, { "name": "__GNU_EH_FRAME_HDR", "flagname": "loc.__GNU_EH_FRAME_HDR", "realname": "__GNU_EH_FRAME_HDR", "ordinal": 41, "bind": "LOCAL", "size": 0, "type": "NOTYPE", "vaddr": 8264, "paddr": 8264, "is_imported": false }, { "name": "_GLOBAL_OFFSET_TABLE_", "flagname": "obj._GLOBAL_OFFSET_TABLE", "realname": "_GLOBAL_OFFSET_TABLE_", "ordinal": 42, "bind": "LOCAL", "size": 0, "type": "OBJ", "vaddr": 16288, "paddr": 12192, "is_imported": false }, { "name": "_init", "flagname": "sym._init", "realname": "_init", "ordinal": 43, "bind": "LOCAL", "size": 0, "type": "FUNC", "vaddr": 4096, "paddr": 4096, "is_imported": false }, { "name": "__libc_csu_fini", "flagname": "sym.__libc_csu_fini", "realname": "__libc_csu_fini", "ordinal": 44, "bind": "GLOBAL", "size": 1, "type": "FUNC", "vaddr": 4752, "paddr": 4752, "is_imported": false }, { "name": "data_start", "flagname": "loc.data_start", "realname": "data_start", "ordinal": 46, "bind": "WEAK", "size": 0, "type": "NOTYPE", "vaddr": 16384, "paddr": 12288, "is_imported": false }, { "name": "_edata", "flagname": "loc._edata", "realname": "_edata", "ordinal": 48, "bind": "GLOBAL", "size": 0, "type": "NOTYPE", "vaddr": 16400, "paddr": 18446744073709551615, "is_imported": false }, { "name": "_fini", "flagname": "sym._fini", "realname": "_fini", "ordinal": 49, "bind": "GLOBAL", "size": 0, "type": "FUNC", "vaddr": 4756, "paddr": 4756, "is_imported": false }, { "name": "__data_start", "flagname": "loc.__data_start", "realname": "__data_start", "ordinal": 53, "bind": "GLOBAL", "size": 0, "type": "NOTYPE", "vaddr": 16384, "paddr": 12288, "is_imported": false }, { "name": "__dso_handle", "flagname": "obj.__dso_handle", "realname": "__dso_handle", "ordinal": 55, "bind": "GLOBAL", "size": 0, "type": "OBJ", "vaddr": 16392, "paddr": 12296, "is_imported": false }, { "name": "_IO_stdin_used", "flagname": "obj._IO_stdin_used", "realname": "_IO_stdin_used", "ordinal": 56, "bind": "GLOBAL", "size": 4, "type": "OBJ", "vaddr": 8192, "paddr": 8192, "is_imported": false }, { "name": "__libc_csu_init", "flagname": "sym.__libc_csu_init", "realname": "__libc_csu_init", "ordinal": 57, "bind": "GLOBAL", "size": 93, "type": "FUNC", "vaddr": 4656, "paddr": 4656, "is_imported": false }, { "name": "_end", "flagname": "loc._end", "realname": "_end", "ordinal": 58, "bind": "GLOBAL", "size": 0, "type": "NOTYPE", "vaddr": 16408, "paddr": 18446744073709551615, "is_imported": false }, { "name": "_start", "flagname": "sym._start", "realname": "_start", "ordinal": 59, "bind": "GLOBAL", "size": 43, "type": "FUNC", "vaddr": 4224, "paddr": 4224, "is_imported": false }, { "name": "__bss_start", "flagname": "loc.__bss_start", "realname": "__bss_start", "ordinal": 60, "bind": "GLOBAL", "size": 0, "type": "NOTYPE", "vaddr": 16400, "paddr": 18446744073709551615, "is_imported": false }, { "name": "main", "flagname": "sym.main", "realname": "main", "ordinal": 61, "bind": "GLOBAL", "size": 137, "type": "FUNC", "vaddr": 4453, "paddr": 4453, "is_imported": false }, { "name": "__TMC_END__", "flagname": "obj.__TMC_END", "realname": "__TMC_END__", "ordinal": 63, "bind": "GLOBAL", "size": 0, "type": "OBJ", "vaddr": 16400, "paddr": 18446744073709551615, "is_imported": false }, { "name": "validate_key", "flagname": "sym.validate_key", "realname": "validate_key", "ordinal": 65, "bind": "GLOBAL", "size": 59, "type": "FUNC", "vaddr": 4590, "paddr": 4590, "is_imported": false }, { "name": "imp._ITM_deregisterTMCloneTable", "flagname": "loc.imp._ITM_deregisterTMCloneTable", "realname": "_ITM_deregisterTMCloneTable", "ordinal": 1, "bind": "WEAK", "size": 16, "type": "NOTYPE", "vaddr": 0, "paddr": 0, "is_imported": true }, { "name": "imp.puts", "flagname": "sym.imp.puts", "realname": "puts", "ordinal": 2, "bind": "GLOBAL", "size": 16, "type": "FUNC", "vaddr": 4144, "paddr": 4144, "is_imported": true }, { "name": "imp.__stack_chk_fail", "flagname": "sym.imp.__stack_chk_fail", "realname": "__stack_chk_fail", "ordinal": 3, "bind": "GLOBAL", "size": 16, "type": "FUNC", "vaddr": 4160, "paddr": 4160, "is_imported": true }, { "name": "imp.printf", "flagname": "sym.imp.printf", "realname": "printf", "ordinal": 4, "bind": "GLOBAL", "size": 16, "type": "FUNC", "vaddr": 4176, "paddr": 4176, "is_imported": true }, { "name": "imp.__libc_start_main", "flagname": "sym.imp.__libc_start_main", "realname": "__libc_start_main", "ordinal": 5, "bind": "GLOBAL", "size": 16, "type": "FUNC", "vaddr": 0, "paddr": 0, "is_imported": true }, { "name": "imp.__gmon_start__", "flagname": "loc.imp.__gmon_start", "realname": "__gmon_start__", "ordinal": 6, "bind": "WEAK", "size": 16, "type": "NOTYPE", "vaddr": 0, "paddr": 0, "is_imported": true }, { "name": "imp.__isoc99_scanf", "flagname": "sym.imp.__isoc99_scanf", "realname": "__isoc99_scanf", "ordinal": 7, "bind": "GLOBAL", "size": 16, "type": "FUNC", "vaddr": 4192, "paddr": 4192, "is_imported": true }, { "name": "imp._ITM_registerTMCloneTable", "flagname": "loc.imp._ITM_registerTMCloneTable", "realname": "_ITM_registerTMCloneTable", "ordinal": 8, "bind": "WEAK", "size": 16, "type": "NOTYPE", "vaddr": 0, "paddr": 0, "is_imported": true }, { "name": "imp.__cxa_finalize", "flagname": "sym.imp.__cxa_finalize", "realname": "__cxa_finalize", "ordinal": 9, "bind": "WEAK", "size": 16, "type": "FUNC", "vaddr": 0, "paddr": 0, "is_imported": true } ], "Csj": [ { "offset": 8200, "type": "Cs", "name": "RW50ZXIgeW91ciBrZXk6ICA=", "enc": "latin1", "ascii": true }, { "offset": 8224, "type": "Cs", "name": "R29vZCBqb2IgbWF0ZSwgbm93IGdvIGtleWdlbiBtZS4=", "enc": "latin1", "ascii": true }, { "offset": 8257, "type": "Cs", "name": "bm9wZS4=", "enc": "latin1", "ascii": true } ], "icj": [], "afvj": { "sp": [], "bp": [ { "name": "var_ch", "kind": "var", "type": "int64_t", "ref": { "base": "rbp", "offset": 18446744073709551604 } }, { "name": "canary", "kind": "var", "type": "int64_t", "ref": { "base": "rbp", "offset": 18446744073709551608 } } ], "reg": [] }, "afcfj": [ { "name": "puts", "return": "int", "args": [], "count": 1 }, { "name": "__stack_chk_fail", "return": "void", "args": [], "count": 0 }, { "name": "printf", "return": "int", "args": [], "count": 1 }, { "name": "scanf", "return": "int", "args": [], "count": 1 } ], "aflj": [ { "offset": 4224, "name": "entry0", "size": 42, "is-pure": "false", "realsz": 42, "noreturn": false, "stackframe": 8, "calltype": "amd64", "cost": 14, "cc": 1, "bits": 64, "type": "fcn", "nbbs": 1, "edges": 0, "ebbs": 1, "signature": "entry0 (int64_t arg3);", "minbound": 4224, "maxbound": 4266, "callrefs": [ { "addr": 16352, "type": "CALL", "at": 4260 } ], "datarefs": [ 4752, 4656, 4453 ], "indegree": 0, "outdegree": 1, "nlocals": 0, "nargs": 1, "bpvars": [], "spvars": [], "regvars": [], "difftype": "new" }, { "offset": 4272, "name": "deregister_tm_clones", "size": 41, "is-pure": "false", "realsz": 34, "noreturn": false, "stackframe": 0, "calltype": "amd64", "cost": 14, "cc": 4, "bits": 64, "type": "fcn", "nbbs": 4, "edges": 4, "ebbs": 2, "signature": "deregister_tm_clones ();", "minbound": 4272, "maxbound": 4313, "callrefs": [ { "addr": 4312, "type": "CODE", "at": 4289 }, { "addr": 4312, "type": "CODE", "at": 4301 } ], "datarefs": [ 16400, 16400, 16344 ], "codexrefs": [ { "addr": 4419, "type": "CALL", "at": 4272 }, { "addr": 4289, "type": "CODE", "at": 4312 }, { "addr": 4301, "type": "CODE", "at": 4312 } ], "dataxrefs": [], "indegree": 3, "outdegree": 0, "nlocals": 0, "nargs": 0, "bpvars": [], "spvars": [], "regvars": [], "difftype": "new" }, { "offset": 4320, "name": "register_tm_clones", "size": 57, "is-pure": "false", "realsz": 51, "noreturn": false, "stackframe": 0, "cost": 19, "cc": 4, "bits": 64, "type": "fcn", "nbbs": 4, "edges": 4, "ebbs": 2, "signature": "register_tm_clones ();", "minbound": 4320, "maxbound": 4377, "callrefs": [ { "addr": 4376, "type": "CODE", "at": 4354 }, { "addr": 4376, "type": "CODE", "at": 4366 } ], "datarefs": [ 16400, 16400, 16368 ], "codexrefs": [ { "addr": 4448, "type": "CODE", "at": 4320 }, { "addr": 4354, "type": "CODE", "at": 4376 }, { "addr": 4366, "type": "CODE", "at": 4376 } ], "dataxrefs": [], "indegree": 3, "outdegree": 0, "nlocals": 0, "nargs": 0, "bpvars": [], "spvars": [], "regvars": [], "difftype": "new" }, { "offset": 4384, "name": "sym.__do_global_dtors_aux", "size": 57, "is-pure": "false", "realsz": 50, "noreturn": false, "stackframe": 8, "cost": 23, "cc": 4, "bits": 64, "type": "sym", "nbbs": 5, "edges": 5, "ebbs": 2, "signature": "sym.__do_global_dtors_aux ();", "minbound": 4384, "maxbound": 4441, "callrefs": [ { "addr": 4440, "type": "CODE", "at": 4391 }, { "addr": 4419, "type": "CODE", "at": 4405 }, { "addr": 4208, "type": "CALL", "at": 4414 }, { "addr": 4272, "type": "CALL", "at": 4419 } ], "datarefs": [ 16400, 16376, 16392, 16400 ], "codexrefs": [ { "addr": 4405, "type": "CODE", "at": 4419 }, { "addr": 4391, "type": "CODE", "at": 4440 } ], "dataxrefs": [], "indegree": 2, "outdegree": 2, "nlocals": 0, "nargs": 0, "bpvars": [], "spvars": [], "regvars": [], "difftype": "new" }, { "offset": 4448, "name": "entry.init0", "size": 5, "is-pure": "false", "realsz": 5, "noreturn": false, "stackframe": 0, "cost": 2, "cc": 0, "bits": 64, "type": "fcn", "nbbs": 1, "edges": 1, "ebbs": 0, "signature": "entry.init0 ();", "minbound": 4448, "maxbound": 4453, "callrefs": [ { "addr": 4320, "type": "CODE", "at": 4448 } ], "datarefs": [], "indegree": 0, "outdegree": 0, "nlocals": 0, "nargs": 0, "bpvars": [], "spvars": [], "regvars": [], "difftype": "new" }, { "offset": 4096, "name": "sym._init", "size": 23, "is-pure": "false", "realsz": 23, "noreturn": false, "stackframe": 8, "cost": 12, "cc": 2, "bits": 64, "type": "sym", "nbbs": 3, "edges": 3, "ebbs": 1, "signature": "sym._init ();", "minbound": 4096, "maxbound": 4119, "callrefs": [ { "addr": 4114, "type": "CODE", "at": 4110 } ], "datarefs": [ 16360 ], "codexrefs": [ { "addr": 4696, "type": "CALL", "at": 4096 }, { "addr": 4110, "type": "CODE", "at": 4114 } ], "dataxrefs": [], "indegree": 2, "outdegree": 0, "nlocals": 0, "nargs": 0, "bpvars": [], "spvars": [], "regvars": [], "difftype": "new" }, { "offset": 4752, "name": "sym.__libc_csu_fini", "size": 1, "is-pure": "true", "realsz": 1, "noreturn": false, "stackframe": 0, "cost": 3, "cc": 1, "bits": 64, "type": "sym", "nbbs": 1, "edges": 0, "ebbs": 1, "signature": "sym.__libc_csu_fini ();", "minbound": 4752, "maxbound": 4753, "codexrefs": [], "dataxrefs": [ 4239 ], "indegree": 0, "outdegree": 0, "nlocals": 0, "nargs": 0, "bpvars": [], "spvars": [], "regvars": [], "difftype": "new" }, { "offset": 4756, "name": "sym._fini", "size": 9, "is-pure": "true", "realsz": 9, "noreturn": false, "stackframe": 8, "cost": 5, "cc": 1, "bits": 64, "type": "sym", "nbbs": 1, "edges": 0, "ebbs": 1, "signature": "sym._fini ();", "minbound": 4756, "maxbound": 4765, "indegree": 0, "outdegree": 0, "nlocals": 0, "nargs": 0, "bpvars": [], "spvars": [], "regvars": [], "difftype": "new" }, { "offset": 4656, "name": "sym.__libc_csu_init", "size": 93, "is-pure": "false", "realsz": 93, "noreturn": false, "stackframe": 56, "cost": 42, "cc": 3, "bits": 64, "type": "sym", "nbbs": 4, "edges": 5, "ebbs": 1, "signature": "sym.__libc_csu_init (int64_t arg1, int64_t arg2, int64_t arg3);", "minbound": 4656, "maxbound": 4749, "callrefs": [ { "addr": 4096, "type": "CALL", "at": 4696 }, { "addr": 4734, "type": "CODE", "at": 4705 }, { "addr": 0, "type": "CALL", "at": 4721 }, { "addr": 4712, "type": "CODE", "at": 4732 } ], "datarefs": [ 15776, 15784 ], "codexrefs": [ { "addr": 4732, "type": "CODE", "at": 4712 }, { "addr": 4705, "type": "CODE", "at": 4734 } ], "dataxrefs": [ 4246 ], "indegree": 2, "outdegree": 2, "nlocals": 0, "nargs": 3, "bpvars": [], "spvars": [], "regvars": [ { "name": "arg1", "kind": "reg", "type": "int64_t", "ref": "rdi" }, { "name": "arg2", "kind": "reg", "type": "int64_t", "ref": "rsi" }, { "name": "arg3", "kind": "reg", "type": "int64_t", "ref": "rdx" } ], "difftype": "new" }, { "offset": 4453, "name": "main", "size": 137, "is-pure": "false", "realsz": 137, "noreturn": false, "stackframe": 24, "cost": 49, "cc": 4, "bits": 64, "type": "sym", "nbbs": 6, "edges": 6, "ebbs": 2, "signature": "int main (int argc, char **argv, char **envp);", "minbound": 4453, "maxbound": 4590, "callrefs": [ { "addr": 4176, "type": "CALL", "at": 4488 }, { "addr": 4192, "type": "CALL", "at": 4512 }, { "addr": 4590, "type": "CALL", "at": 4527 }, { "addr": 4551, "type": "CODE", "at": 4535 }, { "addr": 4144, "type": "CALL", "at": 4544 }, { "addr": 4563, "type": "CODE", "at": 4549 }, { "addr": 4144, "type": "CALL", "at": 4558 }, { "addr": 4588, "type": "CODE", "at": 4581 }, { "addr": 4160, "type": "CALL", "at": 4583 } ], "datarefs": [ 8200, 8218, 1, 8224, 8257 ], "codexrefs": [ { "addr": 4535, "type": "CODE", "at": 4551 }, { "addr": 4549, "type": "CODE", "at": 4563 }, { "addr": 4581, "type": "CODE", "at": 4588 } ], "dataxrefs": [ 4253 ], "indegree": 3, "outdegree": 6, "nlocals": 2, "nargs": 0, "bpvars": [ { "name": "var_ch", "kind": "var", "type": "int64_t", "ref": { "base": "rbp", "offset": 18446744073709551604 } }, { "name": "canary", "kind": "var", "type": "int64_t", "ref": { "base": "rbp", "offset": 18446744073709551608 } } ], "spvars": [], "regvars": [], "difftype": "new" }, { "offset": 4590, "name": "sym.validate_key", "size": 59, "is-pure": "true", "realsz": 59, "noreturn": false, "stackframe": 8, "cost": 26, "cc": 2, "bits": 64, "type": "sym", "nbbs": 4, "edges": 4, "ebbs": 1, "signature": "sym.validate_key (int64_t key);", "minbound": 4590, "maxbound": 4649, "callrefs": [ { "addr": 4642, "type": "CODE", "at": 4633 }, { "addr": 4647, "type": "CODE", "at": 4640 } ], "datarefs": [], "codexrefs": [ { "addr": 4527, "type": "CALL", "at": 4590 }, { "addr": 4633, "type": "CODE", "at": 4642 }, { "addr": 4640, "type": "CODE", "at": 4647 } ], "dataxrefs": [], "indegree": 3, "outdegree": 0, "nlocals": 1, "nargs": 1, "bpvars": [ { "name": "key_backup", "kind": "var", "type": "int64_t", "ref": { "base": "rbp", "offset": 18446744073709551612 } } ], "spvars": [], "regvars": [ { "name": "key", "kind": "reg", "type": "int64_t", "ref": "rdi" } ], "difftype": "new" }, { "offset": 4144, "name": "sym.imp.puts", "size": 6, "is-pure": "true", "realsz": 6, "noreturn": false, "stackframe": 0, "cost": 3, "cc": 1, "bits": 64, "type": "sym", "nbbs": 1, "edges": 0, "ebbs": 1, "signature": "int sym.imp.puts (const char *s);", "minbound": 4144, "maxbound": 4150, "callrefs": [ { "addr": 16312, "type": "CODE", "at": 4144 } ], "datarefs": [], "codexrefs": [ { "addr": 4544, "type": "CALL", "at": 4144 }, { "addr": 4558, "type": "CALL", "at": 4144 } ], "dataxrefs": [], "indegree": 2, "outdegree": 0, "nlocals": 0, "nargs": 0, "bpvars": [], "spvars": [], "regvars": [], "difftype": "new" }, { "offset": 4160, "name": "sym.imp.__stack_chk_fail", "size": 6, "is-pure": "true", "realsz": 6, "noreturn": false, "stackframe": 0, "cost": 3, "cc": 1, "bits": 64, "type": "sym", "nbbs": 1, "edges": 0, "ebbs": 1, "signature": "void sym.imp.__stack_chk_fail ();", "minbound": 4160, "maxbound": 4166, "callrefs": [ { "addr": 16320, "type": "CODE", "at": 4160 } ], "datarefs": [], "codexrefs": [ { "addr": 4583, "type": "CALL", "at": 4160 } ], "dataxrefs": [], "indegree": 1, "outdegree": 0, "nlocals": 0, "nargs": 0, "bpvars": [], "spvars": [], "regvars": [], "difftype": "new" }, { "offset": 4176, "name": "sym.imp.printf", "size": 6, "is-pure": "true", "realsz": 6, "noreturn": false, "stackframe": 0, "cost": 3, "cc": 1, "bits": 64, "type": "sym", "nbbs": 1, "edges": 0, "ebbs": 1, "signature": "int sym.imp.printf (const char *format);", "minbound": 4176, "maxbound": 4182, "callrefs": [ { "addr": 16328, "type": "CODE", "at": 4176 } ], "datarefs": [], "codexrefs": [ { "addr": 4488, "type": "CALL", "at": 4176 } ], "dataxrefs": [], "indegree": 1, "outdegree": 0, "nlocals": 0, "nargs": 0, "bpvars": [], "spvars": [], "regvars": [], "difftype": "new" }, { "offset": 4192, "name": "sym.imp.__isoc99_scanf", "size": 6, "is-pure": "true", "realsz": 6, "noreturn": false, "stackframe": 0, "cost": 3, "cc": 1, "bits": 64, "type": "sym", "nbbs": 1, "edges": 0, "ebbs": 1, "signature": "int sym.imp.__isoc99_scanf (const char *format);", "minbound": 4192, "maxbound": 4198, "callrefs": [ { "addr": 16336, "type": "CODE", "at": 4192 } ], "datarefs": [], "codexrefs": [ { "addr": 4512, "type": "CALL", "at": 4192 } ], "dataxrefs": [], "indegree": 1, "outdegree": 0, "nlocals": 0, "nargs": 0, "bpvars": [], "spvars": [], "regvars": [], "difftype": "new" } ] }
fixed via https://github.com/radareorg/r2dec-js/commit/149514a0ca4172f1d24fc64ec2c3b5f7e1b94264
Describe the bug r2dec crashes when trying to decompile main function of a simple program.
Component
Function Disassembly
Reproduce via JSON (pddi)