{"action":"created","comment":{"url":"https://api.github.com/repos/radare/radare2/pulls/comments/60722721","id":60722721,"diff_hunk":"@@ -0,0 +1,315 @@\n+#include <errno.h>\n+#include <r_types.h>\n+#include \"utils.h\"\n+\n+#define I386_NUM_GREGS 16\n+#define I386_NUM_FREGS 16\n+#define I386_NUM_XREGS 9\n+\n+#define NUM_GPREGS 13\n+\n+#define I386_SSE_NUM_REGS (I386_NUM_GREGS + I386_NUM_FREGS + I386_NUM_XREGS)\n+\n+#define I387_NUM_XMM_REGS 8\n+#define I387_ST0_REGNUM I386_ST0_REGNUM\n+#define I387_FCTRL_REGNUM (I387_ST0_REGNUM + 8)\n+#define I387_FSTAT_REGNUM (I387_FCTRL_REGNUM + 1)\n+#define I387_FTAG_REGNUM (I387_FCTRL_REGNUM + 2)\n+#define I387_FISEG_REGNUM (I387_FCTRL_REGNUM + 3)\n+#define I387_FIOFF_REGNUM (I387_FCTRL_REGNUM + 4)\n+#define I387_FOSEG_REGNUM (I387_FCTRL_REGNUM + 5)\n+#define I387_FOOFF_REGNUM (I387_FCTRL_REGNUM + 6)\n+#define I387_FOP_REGNUM (I387_FCTRL_REGNUM + 7)\n+#define I387_XMM0_REGNUM (I387_ST0_REGNUM + 16)\n+#define I387_MXCSR_REGNUM (I387_XMM0_REGNUM + I387_NUM_XMM_REGS)\n+\n+/* These correspond to the DSMSG_* versions in dsmsgs.h. */\n+enum {\n+\tNTO_REG_GENERAL,\n+\tNTO_REG_FLOAT,\n+\tNTO_REG_SYSTEM,\n+\tNTO_REG_ALT,\n+\tNTO_REG_END\n+};\n+\n+enum i386_regnum {\n+\tI386_EAX_REGNUM,    /* %eax */\n+\tI386_ECX_REGNUM,    /* %ecx */\n+\tI386_EDX_REGNUM,    /* %edx */\n+\tI386_EBX_REGNUM,    /* %ebx */\n+\tI386_ESP_REGNUM,    /* %esp */\n+\tI386_EBP_REGNUM,    /* %ebp */\n+\tI386_ESI_REGNUM,    /* %esi */\n+\tI386_EDI_REGNUM,    /* %edi */\n+\tI386_EIP_REGNUM,    /* %eip */\n+\tI386_EFLAGS_REGNUM, /* %eflags */\n+\tI386_CS_REGNUM,     /* %cs */\n+\tI386_SS_REGNUM,     /* %ss */\n+\tI386_DS_REGNUM,     /* %ds */\n+\tI386_ES_REGNUM,     /* %es */\n+\tI386_FS_REGNUM,     /* %fs */\n+\tI386_GS_REGNUM,     /* %gs */\n+\tI386_ST0_REGNUM     /* %st(0) */\n+};\n+\n+static int i386nto_gregset_reg_offset[] =\n+\t{\n+\t 7 * 4,  /* %eax */\n+\t 6 * 4,  /* %ecx */\n+\t 5 * 4,  /* %edx */\n+\t 4 * 4,  /* %ebx */\n+\t 11 * 4, /* %esp */\n+\t 2 * 4,  /* %epb */\n+\t 1 * 4,  /* %esi */\n+\t 0 * 4,  /* %edi */\n+\t 8 * 4,  /* %eip */\n+\t 10 * 4, /* %eflags */\n+\t 9 * 4,  /* %cs */\n+\t 12 * 4, /* %ss */\n+\t -1      /* filler */\n+};\n+\n+/* Pdebug returns errno values on Neutrino that do not correspond to right\n+   errno values on host side.  */\n+\n+#define NTO_ENAMETOOLONG 78\n+#define NTO_ELIBACC 83\n+#define NTO_ELIBBAD 84\n+#define NTO_ELIBSCN 85\n+#define NTO_ELIBMAX 86\n+#define NTO_ELIBEXEC 87\n+#define NTO_EILSEQ 88\n+#define NTO_ENOSYS 89\n+\n+#if defined(__QNXNTO__) || defined(__SOLARIS__)\n+#define errnoconvert(x) x\n+#elif defined(__linux__) || defined(__CYGWIN__) || defined(__MINGW32__)\n+\n+struct errnomap_t {\n+\tint nto;\n+\tint other;\n+};\n+\n+int\n+errnoconvert (int x) {\n+\tstruct errnomap_t errnomap[] = {\n+#if defined(__linux__)\n+\t\t{NTO_ENAMETOOLONG, ENAMETOOLONG},\n+\t\t{NTO_ELIBACC, ELIBACC},\n+\t\t{NTO_ELIBBAD, ELIBBAD},\n+\t\t{NTO_ELIBSCN, ELIBSCN},\n+\t\t{NTO_ELIBMAX, ELIBMAX},\n+\t\t{NTO_ELIBEXEC, ELIBEXEC},\n+\t\t{NTO_EILSEQ, EILSEQ},\n+\t\t{NTO_ENOSYS, ENOSYS}\n+#elif defined(__CYGWIN__)\n+\t\t{NTO_ENAMETOOLONG, ENAMETOOLONG},\n+\t\t{NTO_ENOSYS, ENOSYS}\n+#elif defined(__MINGW32__)\n+\t\t/* The closest mappings from mingw's errno.h.  */\n+\t\t{NTO_ENAMETOOLONG, ENAMETOOLONG},\n+\t\t{NTO_ELIBACC, ESRCH},\n+\t\t{NTO_ELIBBAD, ESRCH},\n+\t\t{NTO_ELIBSCN, ENOEXEC},\n+\t\t{NTO_ELIBMAX, EPERM},\n+\t\t{NTO_ELIBEXEC, ENOEXEC},\n+\t\t{NTO_EILSEQ, EILSEQ},\n+\t\t{NTO_ENOSYS, ENOSYS}\n+#endif\n+\t};\n+\tint i;\n+\n+\tfor (i = 0; i < sizeof(errnomap) / sizeof(errnomap[0]); i++)\n+\t\tif (errnomap[i].nto == x) return errnomap[i].other;\n+\treturn x;\n+}\n+\n+#define errnoconvert(x) errnoconvert (x)\n+#else\n+#error errno mapping not setup for this host\n+#endif /* __QNXNTO__ */\n+\n+LONGEST\n+extract_signed_integer (const uint8_t *addr, int len, int be) {\n+\tLONGEST retval;\n+\tconst unsigned char *p;\n+\tconst unsigned char *startaddr = addr;\n+\tconst unsigned char *endaddr = startaddr + len;\n+\n+\tif (len > (int)sizeof(LONGEST))\n+\t\teprintf (\"This operation is not available on integers of more than %d bytes\\n\",\n+\t\t\t (int)sizeof(LONGEST));\n+\n+\t/* Start at the most significant end of the integer, and work towards\n+       the least significant.  */\n+\tif (be) {\n+\t\tp = startaddr;\n+\t\t/* Do the sign extension once at the start.  */\n+\t\tretval = ((LONGEST)*p ^ 0x80) - 0x80;\n+\t\tfor (++p; p < endaddr; ++p)\n+\t\t\tretval = (retval << 8) | *p;\n+\t} else {\n+\t\tp = endaddr - 1;\n+\t\t/* Do the sign extension once at the start.  */\n+\t\tretval = ((LONGEST)*p ^ 0x80) - 0x80;\n+\t\tfor (--p; p >= startaddr; --p)\n+\t\t\tretval = (retval << 8) | *p;\n+\t}\n+\treturn retval;\n+}\n+\n+ULONGEST\n+extract_unsigned_integer (const uint8_t *addr, int len, int be) {\n+\tULONGEST retval;\n+\tconst unsigned char *p;\n+\tconst unsigned char *startaddr = addr;\n+\tconst unsigned char *endaddr = startaddr + len;\n+\n+\tif (len > (int)sizeof(LONGEST))\n+\t\teprintf (\"This operation is not available on integers of more than %d bytes\\n\",\n+\t\t\t (int)sizeof(LONGEST));\n+\n+\t/* Start at the most significant end of the integer, and work towards\n+       the least significant.  */\n+\tretval = 0;\n+\tif (be) {\n+\t\tfor (p = startaddr; p < endaddr; ++p)\n+\t\t\tretval = (retval << 8) | *p;\n+\t} else {\n+\t\tfor (p = endaddr - 1; p >= startaddr; --p)\n+\t\t\tretval = (retval << 8) | *p;\n+\t}\n+\treturn retval;\n+}\n+\n+int\n+i386nto_regset_id (int regno) {\n+\tif (regno == -1)\n+\t\treturn NTO_REG_END;\n+\telse if (regno < I386_NUM_GREGS)\n+\t\treturn NTO_REG_GENERAL;\n+\telse if (regno < I386_NUM_GREGS + I386_NUM_FREGS)\n+\t\treturn NTO_REG_FLOAT;\n+\telse if (regno < I386_SSE_NUM_REGS)\n+\t\treturn NTO_REG_FLOAT; /* We store xmm registers in fxsave_area.  */\n+\n+\treturn -1;\n+}\n+\n+int\n+i386nto_reg_offset (int regnum) {\n+\tif (regnum >= 0 && regnum < ARRAY_SIZE (i386nto_gregset_reg_offset))\n+\t\treturn i386nto_gregset_reg_offset[regnum];\n+\n+\treturn -1;\n+}\n+\n+int\n+i386nto_register_area (int regno, int regset, unsigned *off) {\n+\t*off = 0;\n+\tif (regset == NTO_REG_GENERAL) {\n+\t\tif (regno == -1)\n+\t\t\treturn NUM_GPREGS * 4;\n+\n+\t\t*off = i386nto_reg_offset (regno);\n+\t\tif (*off == -1)\n+\t\t\treturn 0;\n+\t\treturn 4;\n+\t} else if (regset == NTO_REG_FLOAT) {\n+\t\tunsigned off_adjust, regsize, regset_size, regno_base;\n+\t\t/* The following are flags indicating number in our fxsave_area.  */\n+\t\tint first_four = (regno >= I387_FCTRL_REGNUM && regno <= I387_FISEG_REGNUM);\n+\t\tint second_four = (regno > I387_FISEG_REGNUM && regno <= I387_FOP_REGNUM);\n+\t\tint st_reg = (regno >= I387_ST0_REGNUM && regno < I387_ST0_REGNUM + 8);\n+\t\tint xmm_reg = (regno >= I387_XMM0_REGNUM && regno < I387_MXCSR_REGNUM);\n+#if 0\n+      if (nto_cpuinfo_valid && nto_cpuinfo_flags | X86_CPU_FXSR)\n+\t  {\n+#endif\n+\t\tregset_size = 512;\n+\t\t/* fxsave_area structure.  */\n+\t\tif (first_four) {\n+\t\t\t/* fpu_control_word, fpu_status_word, fpu_tag_word, fpu_operand\n+\t         registers.  */\n+\t\t\tregsize = 2; /* Two bytes each.  */\n+\t\t\toff_adjust = 0;\n+\t\t\tregno_base = I387_FCTRL_REGNUM;\n+\t\t} else if (second_four) {\n+\t\t\t/* fpu_ip, fpu_cs, fpu_op, fpu_ds registers.  */\n+\t\t\tregsize = 4;\n+\t\t\toff_adjust = 8;\n+\t\t\tregno_base = I387_FISEG_REGNUM + 1;\n+\t\t} else if (st_reg) {\n+\t\t\t/* ST registers.  */\n+\t\t\tregsize = 16;\n+\t\t\toff_adjust = 32;\n+\t\t\tregno_base = I387_ST0_REGNUM;\n+\t\t} else if (xmm_reg) {\n+\t\t\t/* XMM registers.  */\n+\t\t\tregsize = 16;\n+\t\t\toff_adjust = 160;\n+\t\t\tregno_base = I387_XMM0_REGNUM;\n+\t\t} else if (regno == I387_MXCSR_REGNUM) {\n+\t\t\tregsize = 4;\n+\t\t\toff_adjust = 24;\n+\t\t\tregno_base = I387_MXCSR_REGNUM;\n+\t\t} else {\n+\t\t\t/* Whole regset.  */\n+\t\t\toff_adjust = 0;\n+\t\t\tregno_base = 0;\n+\t\t\tregsize = regset_size;\n+\t\t}\n+#if 0\n+\t}\n+      else\n+\t{\n+\t  regset_size = 108;\n+\t  /* fsave_area structure.  */\n+\t  if (first_four || second_four)\n+\t    {\n+\t      /* fpu_control_word, ... , fpu_ds registers.  */\n+\t      regsize = 4;\n+\t      off_adjust = 0;\n+\t      regno_base = I387_FCTRL_REGNUM;\n+\t    }\n+\t  else if (st_reg)\n+\t    {\n+\t      /* One of ST registers.  */\n+\t      regsize = 10;\n+\t      off_adjust = 7 * 4;\n+\t      regno_base = I387_ST0_REGNUM;\n+\t    }\n+\t  else\n+\t    {\n+\t      /* Whole regset.  */\n+\t      off_adjust = 0;\n+\t      regno_base = 0;\n+\t      regsize = regset_size;\n+\t    }\n+\t}\n+#endif\n+\n+\t\tif (regno != -1)","path":"shlr/qnx/src/utils.c","position":292,"original_position":292,"commit_id":"a221e43d83548198aa242a2bfaba5c2ebde9b6e2","original_commit_id":"13d09768cad363457ec7793f279e770b5665f2d0","user":{"login":"radare","id":917142,"avatar_url":"https://avatars.githubusercontent.com/u/917142?v=3","gravatar_id":"","url":"https://api.github.com/users/radare","html_url":"https://github.com/radare","followers_url":"https://api.github.com/users/radare/followers","following_url":"https://api.github.com/users/radare/following{/other_user}","gists_url":"https://api.github.com/users/radare/gists{/gist_id}","starred_url":"https://api.github.com/users/radare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/radare/subscriptions","organizations_url":"https://api.github.com/users/radare/orgs","repos_url":"https://api.github.com/users/radare/repos","events_url":"https://api.github.com/users/radare/events{/privacy}","received_events_url":"https://api.github.com/users/radare/received_events","type":"User","site_admin":false},"body":"use *off = (regno != -1) ?. ... : ...","created_at":"2016-04-22T10:57:37Z","updated_at":"2016-04-22T10:57:37Z","html_url":"https://github.com/radare/radare2/pull/4678#discussion_r60722721","pull_request_url":"https://api.github.com/repos/radare/radare2/pulls/4678","_links":{"self":{"href":"https://api.github.com/repos/radare/radare2/pulls/comments/60722721"},"html":{"href":"https://github.com/radare/radare2/pull/4678#discussion_r60722721"},"pull_request":{"href":"https://api.github.com/repos/radare/radare2/pulls/4678"}}},"pull_request":{"url":"https://api.github.com/repos/radare/radare2/pulls/4678","id":67467422,"html_url":"https://github.com/radare/radare2/pull/4678","diff_url":"https://github.com/radare/radare2/pull/4678.diff","patch_url":"https://github.com/radare/radare2/pull/4678.patch","issue_url":"https://api.github.com/repos/radare/radare2/issues/4678","number":4678,"state":"closed","locked":false,"title":"Debug plugin for QNX Neutrino pdebug interface","user":{"login":"madprogrammer","id":531058,"avatar_url":"https://avatars.githubusercontent.com/u/531058?v=3","gravatar_id":"","url":"https://api.github.com/users/madprogrammer","html_url":"https://github.com/madprogrammer","followers_url":"https://api.github.com/users/madprogrammer/followers","following_url":"https://api.github.com/users/madprogrammer/following{/other_user}","gists_url":"https://api.github.com/users/madprogrammer/gists{/gist_id}","starred_url":"https://api.github.com/users/madprogrammer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/madprogrammer/subscriptions","organizations_url":"https://api.github.com/users/madprogrammer/orgs","repos_url":"https://api.github.com/users/madprogrammer/repos","events_url":"https://api.github.com/users/madprogrammer/events{/privacy}","received_events_url":"https://api.github.com/users/madprogrammer/received_events","type":"User","site_admin":false},"body":"I've made a debug plugin which connects to a QNX system, and allows to remotely debug programs via the QNX `pdebug` protocol (pulled from the QNX-modified version of GDB). The QNX OS itself can run on 32-bit Intel or 32-bit ARM architecture, but this plugin currently only supports Intel, though adding ARM support shouldn't be hard, but I didn't have a chance to test it with an ARM system yet.\r\n\r\nCurrent workflow should be as follows:\r\n  1. Run `r2 -D qnx -a x86 -b 32 qnx://1.2.3.4:8001`, where 8001 is the port you've ran `pdebug` on.\r\n  2. Run `dp*` to list remote processes with their process IDs.\r\n  3. Run `dpa <pid>` to attach to a PID of your choice.\r\n\r\nUse `radare2` debugger commands (`dr`, `ds`, `dc`, `db` etc.) as usual.\r\n\r\n**Known issues:**\r\n\r\nAt initial startup `radare2` tries to attach to a non-existent PID, which fails (`libr/core/io.c:16`):\r\n```\r\npid = *p; // 1st element in debugger's struct must be int\r\n```\r\nFuther commands will return errros until radare is attached to a valid remote process.\r\n\r\nARM32 target architecture support not yet implemented.\r\nSome code licensed under GPL due to the license of GDB.","created_at":"2016-04-22T07:01:04Z","updated_at":"2016-04-22T10:57:37Z","closed_at":"2016-04-22T09:48:04Z","merged_at":null,"merge_commit_sha":"e822b46091f32f4ecf3eb936020cf4bb85dd32f0","assignee":null,"milestone":{"url":"https://api.github.com/repos/radare/radare2/milestones/12","html_url":"https://github.com/radare/radare2/milestones/0.10.3","labels_url":"https://api.github.com/repos/radare/radare2/milestones/12/labels","id":1598497,"number":12,"title":"0.10.3","description":"","creator":{"login":"radare","id":917142,"avatar_url":"https://avatars.githubusercontent.com/u/917142?v=3","gravatar_id":"","url":"https://api.github.com/users/radare","html_url":"https://github.com/radare","followers_url":"https://api.github.com/users/radare/followers","following_url":"https://api.github.com/users/radare/following{/other_user}","gists_url":"https://api.github.com/users/radare/gists{/gist_id}","starred_url":"https://api.github.com/users/radare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/radare/subscriptions","organizations_url":"https://api.github.com/users/radare/orgs","repos_url":"https://api.github.com/users/radare/repos","events_url":"https://api.github.com/users/radare/events{/privacy}","received_events_url":"https://api.github.com/users/radare/received_events","type":"User","site_admin":false},"open_issues":82,"closed_issues":15,"state":"open","created_at":"2016-02-22T23:03:43Z","updated_at":"2016-04-22T09:49:15Z","due_on":"2016-05-22T22:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/radare/radare2/pulls/4678/commits","review_comments_url":"https://api.github.com/repos/radare/radare2/pulls/4678/comments","review_comment_url":"https://api.github.com/repos/radare/radare2/pulls/comments{/number}","comments_url":"https://api.github.com/repos/radare/radare2/issues/4678/comments","statuses_url":"https://api.github.com/repos/radare/radare2/statuses/a221e43d83548198aa242a2bfaba5c2ebde9b6e2","head":{"label":"madprogrammer:qnx","ref":"qnx","sha":"a221e43d83548198aa242a2bfaba5c2ebde9b6e2","user":{"login":"madprogrammer","id":531058,"avatar_url":"https://avatars.githubusercontent.com/u/531058?v=3","gravatar_id":"","url":"https://api.github.com/users/madprogrammer","html_url":"https://github.com/madprogrammer","followers_url":"https://api.github.com/users/madprogrammer/followers","following_url":"https://api.github.com/users/madprogrammer/following{/other_user}","gists_url":"https://api.github.com/users/madprogrammer/gists{/gist_id}","starred_url":"https://api.github.com/users/madprogrammer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/madprogrammer/subscriptions","organizations_url":"https://api.github.com/users/madprogrammer/orgs","repos_url":"https://api.github.com/users/madprogrammer/repos","events_url":"https://api.github.com/users/madprogrammer/events{/privacy}","received_events_url":"https://api.github.com/users/madprogrammer/received_events","type":"User","site_admin":false},"repo":{"id":56796915,"name":"radare2","full_name":"madprogrammer/radare2","owner":{"login":"madprogrammer","id":531058,"avatar_url":"https://avatars.githubusercontent.com/u/531058?v=3","gravatar_id":"","url":"https://api.github.com/users/madprogrammer","html_url":"https://github.com/madprogrammer","followers_url":"https://api.github.com/users/madprogrammer/followers","following_url":"https://api.github.com/users/madprogrammer/following{/other_user}","gists_url":"https://api.github.com/users/madprogrammer/gists{/gist_id}","starred_url":"https://api.github.com/users/madprogrammer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/madprogrammer/subscriptions","organizations_url":"https://api.github.com/users/madprogrammer/orgs","repos_url":"https://api.github.com/users/madprogrammer/repos","events_url":"https://api.github.com/users/madprogrammer/events{/privacy}","received_events_url":"https://api.github.com/users/madprogrammer/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/madprogrammer/radare2","description":"unix-like reverse engineering framework and commandline tools","fork":true,"url":"https://api.github.com/repos/madprogrammer/radare2","forks_url":"https://api.github.com/repos/madprogrammer/radare2/forks","keys_url":"https://api.github.com/repos/madprogrammer/radare2/keys{/key_id}","collaborators_url":"https://api.github.com/repos/madprogrammer/radare2/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/madprogrammer/radare2/teams","hooks_url":"https://api.github.com/repos/madprogrammer/radare2/hooks","issue_events_url":"https://api.github.com/repos/madprogrammer/radare2/issues/events{/number}","events_url":"https://api.github.com/repos/madprogrammer/radare2/events","assignees_url":"https://api.github.com/repos/madprogrammer/radare2/assignees{/user}","branches_url":"https://api.github.com/repos/madprogrammer/radare2/branches{/branch}","tags_url":"https://api.github.com/repos/madprogrammer/radare2/tags","blobs_url":"https://api.github.com/repos/madprogrammer/radare2/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/madprogrammer/radare2/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/madprogrammer/radare2/git/refs{/sha}","trees_url":"https://api.github.com/repos/madprogrammer/radare2/git/trees{/sha}","statuses_url":"https://api.github.com/repos/madprogrammer/radare2/statuses/{sha}","languages_url":"https://api.github.com/repos/madprogrammer/radare2/languages","stargazers_url":"https://api.github.com/repos/madprogrammer/radare2/stargazers","contributors_url":"https://api.github.com/repos/madprogrammer/radare2/contributors","subscribers_url":"https://api.github.com/repos/madprogrammer/radare2/subscribers","subscription_url":"https://api.github.com/repos/madprogrammer/radare2/subscription","commits_url":"https://api.github.com/repos/madprogrammer/radare2/commits{/sha}","git_commits_url":"https://api.github.com/repos/madprogrammer/radare2/git/commits{/sha}","comments_url":"https://api.github.com/repos/madprogrammer/radare2/comments{/number}","issue_comment_url":"https://api.github.com/repos/madprogrammer/radare2/issues/comments{/number}","contents_url":"https://api.github.com/repos/madprogrammer/radare2/contents/{+path}","compare_url":"https://api.github.com/repos/madprogrammer/radare2/compare/{base}...{head}","merges_url":"https://api.github.com/repos/madprogrammer/radare2/merges","archive_url":"https://api.github.com/repos/madprogrammer/radare2/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/madprogrammer/radare2/downloads","issues_url":"https://api.github.com/repos/madprogrammer/radare2/issues{/number}","pulls_url":"https://api.github.com/repos/madprogrammer/radare2/pulls{/number}","milestones_url":"https://api.github.com/repos/madprogrammer/radare2/milestones{/number}","notifications_url":"https://api.github.com/repos/madprogrammer/radare2/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/madprogrammer/radare2/labels{/name}","releases_url":"https://api.github.com/repos/madprogrammer/radare2/releases{/id}","deployments_url":"https://api.github.com/repos/madprogrammer/radare2/deployments","created_at":"2016-04-21T18:31:43Z","updated_at":"2016-04-21T18:31:54Z","pushed_at":"2016-04-22T07:44:47Z","git_url":"git://github.com/madprogrammer/radare2.git","ssh_url":"git@github.com:madprogrammer/radare2.git","clone_url":"https://github.com/madprogrammer/radare2.git","svn_url":"https://github.com/madprogrammer/radare2","homepage":"http://www.radare.org/","size":56977,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"radare:master","ref":"master","sha":"8d531bd93927544baf3c963a2838e7d799846ced","user":{"login":"radare","id":917142,"avatar_url":"https://avatars.githubusercontent.com/u/917142?v=3","gravatar_id":"","url":"https://api.github.com/users/radare","html_url":"https://github.com/radare","followers_url":"https://api.github.com/users/radare/followers","following_url":"https://api.github.com/users/radare/following{/other_user}","gists_url":"https://api.github.com/users/radare/gists{/gist_id}","starred_url":"https://api.github.com/users/radare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/radare/subscriptions","organizations_url":"https://api.github.com/users/radare/orgs","repos_url":"https://api.github.com/users/radare/repos","events_url":"https://api.github.com/users/radare/events{/privacy}","received_events_url":"https://api.github.com/users/radare/received_events","type":"User","site_admin":false},"repo":{"id":4869294,"name":"radare2","full_name":"radare/radare2","owner":{"login":"radare","id":917142,"avatar_url":"https://avatars.githubusercontent.com/u/917142?v=3","gravatar_id":"","url":"https://api.github.com/users/radare","html_url":"https://github.com/radare","followers_url":"https://api.github.com/users/radare/followers","following_url":"https://api.github.com/users/radare/following{/other_user}","gists_url":"https://api.github.com/users/radare/gists{/gist_id}","starred_url":"https://api.github.com/users/radare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/radare/subscriptions","organizations_url":"https://api.github.com/users/radare/orgs","repos_url":"https://api.github.com/users/radare/repos","events_url":"https://api.github.com/users/radare/events{/privacy}","received_events_url":"https://api.github.com/users/radare/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/radare/radare2","description":"unix-like reverse engineering framework and commandline tools","fork":false,"url":"https://api.github.com/repos/radare/radare2","forks_url":"https://api.github.com/repos/radare/radare2/forks","keys_url":"https://api.github.com/repos/radare/radare2/keys{/key_id}","collaborators_url":"https://api.github.com/repos/radare/radare2/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/radare/radare2/teams","hooks_url":"https://api.github.com/repos/radare/radare2/hooks","issue_events_url":"https://api.github.com/repos/radare/radare2/issues/events{/number}","events_url":"https://api.github.com/repos/radare/radare2/events","assignees_url":"https://api.github.com/repos/radare/radare2/assignees{/user}","branches_url":"https://api.github.com/repos/radare/radare2/branches{/branch}","tags_url":"https://api.github.com/repos/radare/radare2/tags","blobs_url":"https://api.github.com/repos/radare/radare2/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/radare/radare2/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/radare/radare2/git/refs{/sha}","trees_url":"https://api.github.com/repos/radare/radare2/git/trees{/sha}","statuses_url":"https://api.github.com/repos/radare/radare2/statuses/{sha}","languages_url":"https://api.github.com/repos/radare/radare2/languages","stargazers_url":"https://api.github.com/repos/radare/radare2/stargazers","contributors_url":"https://api.github.com/repos/radare/radare2/contributors","subscribers_url":"https://api.github.com/repos/radare/radare2/subscribers","subscription_url":"https://api.github.com/repos/radare/radare2/subscription","commits_url":"https://api.github.com/repos/radare/radare2/commits{/sha}","git_commits_url":"https://api.github.com/repos/radare/radare2/git/commits{/sha}","comments_url":"https://api.github.com/repos/radare/radare2/comments{/number}","issue_comment_url":"https://api.github.com/repos/radare/radare2/issues/comments{/number}","contents_url":"https://api.github.com/repos/radare/radare2/contents/{+path}","compare_url":"https://api.github.com/repos/radare/radare2/compare/{base}...{head}","merges_url":"https://api.github.com/repos/radare/radare2/merges","archive_url":"https://api.github.com/repos/radare/radare2/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/radare/radare2/downloads","issues_url":"https://api.github.com/repos/radare/radare2/issues{/number}","pulls_url":"https://api.github.com/repos/radare/radare2/pulls{/number}","milestones_url":"https://api.github.com/repos/radare/radare2/milestones{/number}","notifications_url":"https://api.github.com/repos/radare/radare2/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/radare/radare2/labels{/name}","releases_url":"https://api.github.com/repos/radare/radare2/releases{/id}","deployments_url":"https://api.github.com/repos/radare/radare2/deployments","created_at":"2012-07-03T07:42:26Z","updated_at":"2016-04-21T19:33:25Z","pushed_at":"2016-04-22T09:54:00Z","git_url":"git://github.com/radare/radare2.git","ssh_url":"git@github.com:radare/radare2.git","clone_url":"https://github.com/radare/radare2.git","svn_url":"https://github.com/radare/radare2","homepage":"http://www.radare.org/","size":73519,"stargazers_count":2532,"watchers_count":2532,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":565,"mirror_url":null,"open_issues_count":700,"forks":565,"open_issues":700,"watchers":2532,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/radare/radare2/pulls/4678"},"html":{"href":"https://github.com/radare/radare2/pull/4678"},"issue":{"href":"https://api.github.com/repos/radare/radare2/issues/4678"},"comments":{"href":"https://api.github.com/repos/radare/radare2/issues/4678/comments"},"review_comments":{"href":"https://api.github.com/repos/radare/radare2/pulls/4678/comments"},"review_comment":{"href":"https://api.github.com/repos/radare/radare2/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/radare/radare2/pulls/4678/commits"},"statuses":{"href":"https://api.github.com/repos/radare/radare2/statuses/a221e43d83548198aa242a2bfaba5c2ebde9b6e2"}}}}