============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined GHOST_GetWindowUserData() MOV RAX,qword ptr [RDI] JMP qword ptr [RAX + 0xe0] ?? 0Fh Actual src: GHOST_TUserDataPtr GHOST_GetWindowUserData(GHOST_WindowHandle windowhandle) { GHOST_IWindow *window = (GHOST_IWindow *)windowhandle; return window->getUserData(); } Predicted src: void G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALLCALL G_CALLCALL G_CALL G_CALLCALLCALL G_CALLCALL G_CALLCALLCALLCALLCALLG_CALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCALLCAL ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined step_describe_props() MOV EAX,dword ptr [.data:step_props[56]] PUSH R12 LEA R12,[.data:step_props] TEST EAX,EAX JZ LAB_00106720 MOV RAX=>.data:step_props,R12 POP R12 RET ?? 0Fh ?? 1Fh ?? 80h ?? 00h ?? 00h ?? 00h ?? 00h LAB_00106720: MOV RDI=>.data:step_props,R12 CALL .plt:::prop_desc_list_calculate_quarks ;undefined prop_desc_list_calculate_q... MOV RAX=>.data:step_props,R12 POP R12 RET ?? 66h f Actual src: static PropDescription * step_describe_props(Step *step) { if (step_props[0].quark == 0) { prop_desc_list_calculate_quarks(step_props); } return step_props; } Predicted src: const char *desc_desc(void) { static const char *name = NULL; if (!desc_list) return NULL; if (!strcmp(desc_list, "desc_list")) desc_list = desc_list; return name; } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* SBMap::getLinearValue(unsigned int, unsigned int) * ;************************************************************************************************************************************************************ ;undefined getLinearValue(SBMap * this, uint param_1, uint param_2) ;this SBMap * RDI ;param_1 uint ESI ;param_2 uint EDX ;local_10 undefined8 -10 ;local_14 undefined4 -14 PUSH RBX MOV param_1,param_1 SUB RSP,0x10 MOV RAX,qword ptr FS:[0x28] MOV qword ptr [RSP + local_10+0x18],RAX XOR EAX,EAX MOV RAX,qword ptr [this + 0x68] MOV this,qword ptr [RAX + param_1*0x8] MOV R11D,dword ptr [this + 0x50] TEST R11D,R11D JNZ LAB_0022c318 MOV R8D,param_2 CMP param_2,dword ptr [this + 0x18] JNC LAB_0022c2f8 MOVZX EBX,byte ptr [this + 0x12] CMP BL,0x2 JA LAB_0022c2f8 LEA param_2=>local_14,[RSP + 0x4] MOV param_1,R8D CALL SBMapItem::getValue ;undefined getValue(SBMapItem * this,... MOV param_2,0x1 MOV ECX,EBX SHL param_2,CL CMP param_2,dword ptr [RSP + local_14+0x18] JZ LAB_0022c320 NOP dword ptr [RAX] LAB_0022c2f8: MOV RAX,qword ptr [RSP + local_10+0x18] SUB RAX,qword ptr FS:[0x28] JNZ LAB_0022c33d ADD RSP,0x10 MOV EAX,R11D POP RBX RET ?? 0Fh ?? 1Fh ?? 80h ?? 00h ?? 00h ?? 00h ?? 00h LAB_0022c318: XOR R11D,R11D JMP LAB_0022c2f8 ?? 0Fh ?? 1Fh ?? 00h LAB_0022c320: ADD param_2,RAX NOP dword ptr [RAX + RAX*0x1] LAB_0022c328: MOVZX ECX,byte ptr [RAX] SHL R11D,0x8 ADD RAX,0x1 ADD R11D,ECX CMP RAX,param_2 JNZ LAB_0022c328 JMP LAB_0022c2f8 LAB_0022c33d: CALL .plt:::__stack_chk_fail ;undefined __stack_chk_fail() NOP dword ptr CS:[RAX + RAX*0x1] Actual src: SS_UCS4 SBMap::getLinearValue (unsigned int _index, unsigned int position) { return maps[_index]->getLinearValue(position); } Predicted src: uint32_t getValue(uint32_t index, uint32_t index) { uint32_t i; for (i = 0; i < index; ++i) { if (index[i] == index) { return index[i]; } } return 0; } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined sigbus_hook() MOV ESI,0x13 JMP generic_hook.constprop.0 ;undefined generic_hook.constprop.0() ?? 66h f Actual src: static void sigbus_hook(lua_State *L, lua_Debug *ar) { generic_hook(L, ar, 19); } Predicted src: static void sighook_hook(lua_State *L) { sighook_hook(L, 1); } ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined pv_label() ;local_10 undefined8 -10 ;local_20 undefined8 -20 PUSH RBP MOV RBP,RSP SUB RSP,0x20 MOV qword ptr [RBP + local_20+0x8],RDI MOV RAX,qword ptr [RBP + local_20+0x8] MOV RCX,qword ptr [RAX + 0x40] MOV RAX,qword ptr [RBP + local_20+0x8] MOV EDX,0x0 MOV RSI,RCX MOV RDI,RAX CALL lvmcache_info_from_pvid ;undefined lvmcache_info_from_pvid() MOV qword ptr [RBP + local_10+0x8],RAX CMP qword ptr [RBP + local_10+0x8],0x0 JZ LAB_0023faa5 MOV RAX,qword ptr [RBP + local_10+0x8] MOV RDI,RAX CALL lvmcache_get_label ;undefined lvmcache_get_label() JMP LAB_0023fb04 LAB_0023faa5: MOV RAX,qword ptr [RBP + local_20+0x8] MOV RAX,qword ptr [RAX + 0x88] TEST RAX,RAX JZ LAB_0023faff MOV RAX,qword ptr [RBP + local_20+0x8] MOV RAX,qword ptr [RAX + 0x40] TEST RAX,RAX JZ LAB_0023faff MOV RAX,qword ptr [RBP + local_20+0x8] MOV RAX,qword ptr [RAX + 0x40] MOV RDI,RAX CALL dev_name ;undefined dev_name() MOV R9,RAX LEA R8,[.rodata:s_Internal_error:_PV_%s_unexpected_0033ccc0] ;= "Internal error: PV %s unexpectedl... MOV ECX,0xffffffff MOV EDX,0x19f LEA RAX,[.rodata:s_metadata/pv.c_0033cc56] ;= "metadata/pv.c" MOV RSI=>.rodata:s_metadata/pv.c_0033cc56,RAX ;= "metadata/pv.c" MOV EDI,0x3 MOV EAX,0x0 CALL print_log ;undefined print_log(undefined param_... LAB_0023faff: MOV EAX,0x0 LAB_0023fb04: LEAVE RET ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined _add_pe_range() ;local_10 undefined8 -10 ;local_20 undefined8 -20 ;local_28 undefined8 -28 ;local_30 undefined8 -30 ;local_34 undefined4 -34 ;local_38 undefined4 -38 PUSH RBP Actual src: struct label *pv_label(const struct physical_volume *pv) { struct lvmcache_info *info = lvmcache_info_from_pvid((const char *)&pv->id.uuid, pv->dev, 0); if (info) return lvmcache_get_label(info); /* process_each_pv() may create dummy PVs that have no label */ if (pv->vg && pv->dev) log_error(INTERNAL_ERROR "PV %s unexpectedly not in cache.", dev_name(pv->dev)); return NULL; } Predicted src: static int _label_label_get_label(struct _label *label, struct _label *label) { if (!label) return -1; if (label->label == NULL) { label_error(label, _("Error: %s"), label->name); return -1; } if (label->label == NULL) { label_error(label, _("Error: %s"), label->name); return -1; } return 0; }