============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined gimp_draw_tool_add_sample_point() PUSH R14 PUSH R13 PUSH R12 PUSH RBP SUB RSP,0x8 TEST RDI,RDI JZ LAB_00252220 MOV RBP,RDI MOV R12D,ESI MOV R13D,EDX MOV R14D,ECX CALL gimp_draw_tool_get_type ;undefined gimp_draw_tool_get_type() MOV RSI,RAX MOV RAX,qword ptr [RBP] TEST RAX,RAX JZ LAB_002521c6 CMP qword ptr [RAX],RSI JZ LAB_002521d2 LAB_002521c6: MOV RDI,RBP CALL .plt:::g_type_check_instance_is_a ;undefined g_type_check_instance_is_a() TEST EAX,EAX JZ LAB_00252220 LAB_002521d2: MOV RDI,qword ptr [RBP + 0x178] CALL gimp_display_get_shell ;undefined gimp_display_get_shell() MOV ECX,R14D MOV EDX,R13D MOV ESI,R12D MOV R8D,0x1 MOV RDI,RAX CALL gimp_canvas_sample_point_new ;undefined gimp_canvas_sample_point_n... MOV RDI,RBP MOV R12,RAX MOV RSI,RAX CALL gimp_draw_tool_add_item ;undefined gimp_draw_tool_add_item() MOV RDI,R12 CALL .plt.got:::g_object_unref ;undefined g_object_unref() ADD RSP,0x8 MOV RAX,R12 POP RBP POP R12 POP R13 POP R14 RET ?? 66h f ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_00252220: LEA RDX,[.rodata:s_GIMP_IS_DRAW_TOOL_(draw_tool)_00674a44] ;= "GIMP_IS_DRAW_TOOL (draw_tool)" LEA RSI,[.rodata:__func__.10] ;= "gimp_draw_tool_add_sample_point" XOR R12D,R12D LEA RDI,[.rodata:s_Gimp-Tools_0064f9c7] ;= "Gimp-Tools" CALL .plt:::g_return_if_fail_warning ;undefined g_return_if_fail_warning() ADD RSP,0x8 MOV RAX,R12 POP RBP POP R12 POP R13 POP R14 RET ?? 0Fh Actual src: GimpCanvasItem * gimp_draw_tool_add_sample_point (GimpDrawTool *draw_tool, gint x, gint y, gint index) { GimpCanvasItem *item; g_return_val_if_fail (GIMP_IS_DRAW_TOOL (draw_tool), NULL); item = gimp_canvas_sample_point_new (gimp_display_get_shell (draw_tool->display), x, y, index, TRUE); gimp_draw_tool_add_item (draw_tool, item); g_object_unref (item); return item; } Predicted src: GimpDisplay * gimp_tool_tool_add_point (GimpTool *tool, GimpDisplay *display) { g_return_val_if_fail (GIMP_IS_TOOL (tool), NULL); g_return_val_if_fail (GIMP_IS_TOOL (display), NULL); return gimp_tool_tool_add_point (GIMP_TOOL_GET_CLASS (tool)->add_point, display); } ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined IntelGen_HwAddMediaObjectCmdBb_g75() PUSH RBP MOV RBP,RDX PUSH RBX MOV RBX,RSI SUB RSP,0x8 TEST RDI,RDI JZ LAB_00133b08 LAB_001339f5: TEST RBX,RBX JZ LAB_00133ad0 CMP qword ptr [RBX + 0xa8],0x0 JZ LAB_00133af0 LAB_00133a0c: TEST RBP,RBP JZ LAB_00133ab8 LAB_00133a15: CMP dword ptr [RBP + 0x4],0x17 JBE LAB_00133a80 LAB_00133a1b: MOV EDX,dword ptr [RBX + 0x9c] MOV EAX,dword ptr [RBX + 0x98] SUB EAX,EDX CMP EAX,0x17 JLE LAB_00133a98 LAB_00133a2e: MOV RCX,qword ptr [->g_cInit_MEDIA_OBJECT_HEADER_G6] ;= 00165210 MOVSXD RAX,EDX MOV ESI,dword ptr [RBP] ADD EDX,0x18 ADD RAX,qword ptr [RBX + 0xa8] MOVDQU XMM0,xmmword ptr [RCX]=>.rodata:g_cInit_MEDIA_OBJECT_HEADER_G6 MOV RCX,qword ptr [RCX + 0x10]=>.rodata:g_cInit_MEDIA_OBJECT_HEADER_G6[16] AND ESI,0x3f MOV qword ptr [RAX + 0x10],RCX MOV ECX,dword ptr [RBP + 0x4] MOVUPS xmmword ptr [RAX],XMM0 SHR ECX,0x2 SUB ECX,0x2 MOV word ptr [RAX],CX MOVZX ECX,byte ptr [RAX + 0x4] AND ECX,0xffffffc0 OR ECX,ESI MOV byte ptr [RAX + 0x4],CL MOV dword ptr [RBX + 0x9c],EDX ADD RSP,0x8 POP RBX POP RBP RET ?? 0Fh ?? 1Fh ?? 40h @ ?? 00h LAB_00133a80: MOV ESI,0x1 MOV EDI,0x1 CALL .plt:_GENOS_Assert ;undefined _GENOS_Assert() JMP LAB_00133a1b ?? 0Fh ?? 1Fh ?? 80h ?? 00h ?? 00h ?? 00h ?? 00h LAB_00133a98: MOV ESI,0x1 MOV EDI,0x1 CALL .plt:_GENOS_Assert ;undefined _GENOS_Assert() MOV EDX,dword ptr [RBX + 0x9c] JMP LAB_00133a2e ?? 66h f ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_00133ab8: MOV ESI,0x1 MOV EDI,0x1 CALL .plt:_GENOS_Assert ;undefined _GENOS_Assert() JMP LAB_00133a15 ?? 0Fh ?? 1Fh ?? 40h @ ?? 00h LAB_00133ad0: MOV ESI,0x1 MOV EDI,0x1 CALL .plt:_GENOS_Assert ;undefined _GENOS_Assert() CMP qword ptr [RBX + 0xa8],0x0 JNZ LAB_00133a0c NOP dword ptr [RAX] LAB_00133af0: MOV ESI,0x1 MOV EDI,0x1 CALL .plt:_GENOS_Assert ;undefined _GENOS_Assert() JMP LAB_00133a0c ?? 0Fh ?? 1Fh ?? 40h @ ?? 00h LAB_00133b08: MOV ESI,0x1 MOV EDI,0x1 CALL .plt:_GENOS_Assert ;undefined _GENOS_Assert() JMP LAB_001339f5 ?? 0Fh Actual src: VOID IntelGen_HwAddMediaObjectCmdBb_g75(PGENHW_HW_INTERFACE pHwInterface, PGENHW_BATCH_BUFFER pBatchBuffer, PGENHW_HW_MEDIAOBJECT_PARAM pParam) { PBYTE pBuffer; PMEDIA_OBJECT_HEADER_G6 pCmd; GENHW_HW_ASSERT(pHwInterface); GENHW_HW_ASSERT(pBatchBuffer); GENHW_HW_ASSERT(pBatchBuffer->pData); GENHW_HW_ASSERT(pParam); GENHW_HW_ASSERT(pParam->dwMediaObjectSize >= sizeof(MEDIA_OBJECT_HEADER_G6)); GENHW_HW_ASSERT((pBatchBuffer->iSize - pBatchBuffer->iCurrent) >= (long)sizeof(MEDIA_OBJECT_HEADER_G6)); pBuffer = pBatchBuffer->pData + pBatchBuffer->iCurrent; pCmd = (PMEDIA_OBJECT_HEADER_G6) pBuffer; *pCmd = g_cInit_MEDIA_OBJECT_HEADER_G6; pCmd->DW0.DWordLength = OP_LENGTH(SIZE_IN_DW(pParam->dwMediaObjectSize)); pCmd->DW1.InterfaceDescriptorOffset = pParam->dwIDOffset; pBatchBuffer->iCurrent += sizeof(MEDIA_OBJECT_HEADER_G6); } Predicted src: void _G_G_Init (G_G_GNUC_UNUSED G_GNUC_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_GNUC_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G_UNUSED G ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined Ligature_find_N() LEA EAX,[RDI + -0x132] CMP EAX,0x11044 JA LAB_001ce84d PUSH RBX MOV EBX,EDI CMP EDI,0xffff JBE LAB_001ce7f0 CMP EDI,0x10f26 JBE LAB_001ce7cc MOV ECX,0x3 XOR ESI,ESI LEA RDI,[.rodata:ligature32] NOP word ptr [RAX + RAX*0x1] LAB_001ce7a8: CMP RCX,RSI JBE LAB_001ce7cc LAB_001ce7ad: LEA RDX,[RCX + RSI*0x1] SHR RDX,1 LEA RAX,[RDX*0x4] ; FWD[2,0]: 0045e44c,0045e450 CMP dword ptr [RDI + RDX*0x4]=>.rodata:ligature32[4],EBX JA LAB_001ce7d8 JZ LAB_001ce7e0 LEA RSI,[RDX + 0x1] CMP RCX,RSI JA LAB_001ce7ad LAB_001ce7cc: MOV EAX,0xffffffff POP RBX RET ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_001ce7d8: MOV RCX,RDX JMP LAB_001ce7a8 ?? 0Fh ?? 1Fh ?? 00h LAB_001ce7e0: SAR RAX,0x2 POP RBX ADD EAX,0x1ff RET ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_001ce7f0: CALL .plt:ffUnicodeUtype ;undefined ffUnicodeUtype() TEST EAX,0x20000000 JZ LAB_001ce7cc MOV R8D,EBX MOV ECX,0x1ff XOR ESI,ESI LEA RDI,[.rodata:ligature16] CMP EBX,0xfefc JA LAB_001ce7cc NOP dword ptr [RAX] LAB_001ce818: CMP RCX,RSI JBE LAB_001ce7cc LAB_001ce81d: LEA RAX,[RCX + RSI*0x1] MOV RDX,RAX AND RAX,-0x2 SHR RDX,1 ; FWD[2,0]: 0045e65e,0045e75e CMP R8W,word ptr [RDI + RDX*0x2]=>.rodata:ligature16[510] JC LAB_001ce840 JZ LAB_001ce848 LEA RSI,[RDX + 0x1] CMP RCX,RSI JA LAB_001ce81d JMP LAB_001ce7cc ?? 90h LAB_001ce840: MOV RCX,RDX JMP LAB_001ce818 ?? 0Fh ?? 1Fh ?? 00h LAB_001ce848: SAR RAX,1 POP RBX RET LAB_001ce84d: MOV EAX,0xffffffff RET ?? 66h f Actual src: int Ligature_find_N(uint32 uCode) { uint16 uCode16, *p16; uint32 *p32; int n=-1; if ( uCode < FF_ligature16FIRST || uCode > FF_ligature32LAST || \ ((uCode < FF_UTYPE_MAXC) && (isligorfrac(uCode)==0)) ) return( -1 ); if ( uCode <= FF_ligature16LAST ) { uCode16 = uCode; p16 = (uint16 *)(bsearch(&uCode16, ligature16, FF_ligatureTOTAL16, \ sizeof(uint16), compare_codepoints16)); if ( p16 ) n = p16 - ligature16; } else if ( uCode >= FF_ligature32FIRST ) { p32 = (uint32 *)(bsearch(&uCode, ligature32, FF_ligatureTOTAL32, \ sizeof(uint32), compare_codepoints32)); if ( p32 ) n = p32 - ligature32 + FF_ligatureTOTAL16; } return( n ); } Predicted src: int find_find_short(char *s, int n) { int i; for (i = 0; i < n; i++) { if (s[i] == n) return i; } return -1; } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined glXGetCurrentReadDrawable() SUB RSP,0x8 LEA RDI,[.got:PTR_001407b0] ;= 00000000 CALL .plt:::__tls_get_addr ;undefined __tls_get_addr() MOV RAX,qword ptr [RAX + 0x10] ADD RSP,0x8 RET ?? 0Fh Actual src: GLXDrawable glXGetCurrentReadDrawable(void) { return tsdata.read_drawable; } Predicted src: static PyObject * struct gl_get_gl(PyObject *self, PyObject *args) { return ((struct gl_struct *)self)->gl_gl); } ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* CDVDInputStreamBluray::IsEOF() * ;************************************************************************************************************************************************************ ;undefined IsEOF(void) XOR EAX,EAX RET ?? 90h Actual src: bool CDVDInputStreamBluray::IsEOF() { return false; } Predicted src: bool CStreamStream::IsStream() { return false; }