============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined init_child_item() PUSH R12 PUSH RBP MOV RBP,RDI PUSH RBX MOV RBX,qword ptr [RDI + 0x60] CALL .plt:e_tree_get_type ;undefined e_tree_get_type() MOV R12,RAX CALL .plt:::gtk_accessible_get_type ;undefined gtk_accessible_get_type() MOV RDI,RBP MOV RSI,RAX CALL .plt:::g_type_check_instance_cast ;undefined g_type_check_instance_cast() MOV RDI,RAX CALL .plt:::gtk_accessible_get_widget ;undefined gtk_accessible_get_widget() MOV RSI,R12 MOV RDI,RAX CALL .plt:::g_type_check_instance_cast ;undefined g_type_check_instance_cast() TEST RAX,RAX JZ LAB_002ea090 MOV RDI,RAX CALL .plt:e_tree_get_item ;undefined e_tree_get_item() CMP qword ptr [RBX],0x0 JZ LAB_002ea070 POP RBX POP RBP POP R12 RET ?? 66h f ?? 90h LAB_002ea070: MOV ESI,0x50 MOV RDI,RAX CALL .plt:::g_type_check_instance_cast ;undefined g_type_check_instance_cast() MOV RDI,RAX CALL .plt:::atk_gobject_accessible_for_object ;undefined atk_gobject_accessible_for... MOV qword ptr [RBX],RAX POP RBX POP RBP POP R12 RET ?? 0Fh ?? 1Fh ?? 00h LAB_002ea090: POP RBX LEA RDX,[.rodata:DAT_00318012] ;= 74h t LEA RSI,[.rodata:__func__.0] ;= "init_child_item" POP RBP LEA RDI,[.rodata:s_evolution-util_002ef0ab] ;= "evolution-util" POP R12 JMP .plt:::g_return_if_fail_warning ;undefined g_return_if_fail_warning() ?? 66h f Actual src: static void init_child_item (GalA11yETree *a11y) { GalA11yETreePrivate *priv = a11y->priv; ETree *tree; ETableItem * eti; tree = E_TREE (gtk_accessible_get_widget (GTK_ACCESSIBLE (a11y))); g_return_if_fail (tree); eti = e_tree_get_item (tree); if (priv->child_item == NULL) { priv->child_item = atk_gobject_accessible_for_object (G_OBJECT (eti)); } } Predicted src: static void e_tree_item_init (GtkWidget *widget) { GList *child; g_return_if_fail (E_IS_TREE_ITEM (widget)); child = E_TREE_ITEM (widget); if (child == NULL) return; child = g_object_get_data (G_OBJECT (child), "child"); g_return_if_fail (child!= NULL); if (child!= NULL) g_object_unref (child); } ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined pomodoro_stats_week_page_real_get_reference_value_data_free() PUSH RBP MOV RBP,RDI MOV RDI,qword ptr [RDI + 0x20] TEST RDI,RDI JZ LAB_00133eba CALL .plt.got:::g_object_unref ;undefined g_object_unref() MOV qword ptr [RBP + 0x20],0x0 LAB_00133eba: MOV RSI,RBP MOV EDI,0x30 POP RBP JMP .plt:::g_slice_free1 ;undefined g_slice_free1() ?? 0Fh Actual src: static void pomodoro_stats_week_page_real_get_reference_value_data_free (gpointer _data) { PomodoroStatsWeekPageGetReferenceValueData* _data_; _data_ = _data; _g_object_unref0 (_data_->self); g_slice_free (PomodoroStatsWeekPageGetReferenceValueData, _data_); } Predicted src: static void geary_imap_data_value_page_real_page_real_data_free_value (gpointer _data) { GearyImapEngineDataPagePageData* _data_; _data_ = _data; _g_object_unref0 (_data_->self); g_slice_free (GearyImapEngineDataPageData, _data_); } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined BKE_previewimg_cached_thumbnail_read() ;local_40 undefined8 -40 ;local_48 undefined8 -48 PUSH R15 MOV R15D,ECX PUSH R14 MOV R14D,EDX PUSH R13 MOV R13,RSI MOV RSI,RDI PUSH R12 PUSH RBP MOV RBP,RDI PUSH RBX SUB RSP,0x18 MOV RDI,qword ptr [.bss:gCachedPreviews] ;=?? MOV RAX,qword ptr FS:[0x28] MOV qword ptr [RSP + local_40+0x48],RAX XOR EAX,EAX MOV qword ptr [RSP]=>local_48,0x0 CALL BLI_ghash_lookup_p ;undefined BLI_ghash_lookup_p() MOV R12,qword ptr [RSP]=>local_48 MOV RBX,RAX TEST RAX,RAX JZ LAB_011aabe4 MOV R12,qword ptr [RAX] MOV qword ptr [RSP]=>local_48,R12 LAB_011aabe4: TEST R12,R12 JZ LAB_011aac60 TEST R15B,R15B JNZ LAB_011aac18 LAB_011aabee: MOV RAX,qword ptr [RSP + local_40+0x48] SUB RAX,qword ptr FS:[0x28] JNZ LAB_011aacb7 ADD RSP,0x18 MOV RAX,R12 POP RBX POP RBP POP R12 POP R13 POP R14 POP R15 RET ?? 0Fh ?? 1Fh ?? 40h @ ?? 00h LAB_011aac18: MOVZX EAX,byte ptr [R12 + 0x40] CMP EAX,R14D JNZ LAB_011aac40 LEA RDI,[R12 + 0x41] MOV RSI,R13 CALL .plt:::strcmp ;int strcmp(char * __s1, char * __s2) TEST EAX,EAX JNZ LAB_011aac40 MOV RDI,R12 CALL BKE_previewimg_clear ;undefined BKE_previewimg_clear() JMP LAB_011aac48 ?? 66h f ?? 90h LAB_011aac40: MOV RDI,RSP CALL BKE_previewimg_free ;undefined BKE_previewimg_free() LAB_011aac48: MOV R12,qword ptr [RSP]=>local_48 TEST R12,R12 JZ LAB_011aac60 TEST RBX,RBX JZ LAB_011aac94 LAB_011aac56: MOV qword ptr [RBX],R12 MOV R12,qword ptr [RSP]=>local_48 JMP LAB_011aabee ?? 90h LAB_011aac60: MOV RDI,R13 CALL .plt:::strlen ;size_t strlen(char * __s) LEA RDI,[RAX + 0x2] MOV R15,RAX CALL previewimg_create_ex ;undefined previewimg_create_ex(ulong... LEA RDX,[R15 + 0x1] MOV RSI,R13 MOV byte ptr [RAX + 0x40],R14B MOV R12,RAX LEA RDI,[RAX + 0x41] CALL .plt:::memcpy ;void * memcpy(void * __dest, void *... MOV qword ptr [RSP]=>local_48,R12 TEST RBX,RBX JNZ LAB_011aac56 LAB_011aac94: MOV RDI,RBP CALL BLI_strdup ;undefined BLI_strdup() MOV RDI,qword ptr [.bss:gCachedPreviews] ;=?? MOV RDX,R12 MOV RSI,RAX CALL BLI_ghash_insert ;undefined BLI_ghash_insert() MOV R12,qword ptr [RSP]=>local_48 JMP LAB_011aabee LAB_011aacb7: CALL .plt:::__stack_chk_fail ;undefined __stack_chk_fail() ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined FUN_011aacbc() NOP dword ptr [RAX] Actual src: PreviewImage *BKE_previewimg_cached_thumbnail_read(const char *name, const char *path, const int source, bool force_update) { BLI_assert(BLI_thread_is_main()); PreviewImage *prv = nullptr; void **prv_p; prv_p = BLI_ghash_lookup_p(gCachedPreviews, name); if (prv_p) { prv = *(PreviewImage **)prv_p; BLI_assert(prv); } if (prv && force_update) { const char *prv_deferred_data = (char *)PRV_DEFERRED_DATA(prv); if (((int)prv_deferred_data[0] == source) && STREQ(&prv_deferred_data[1], path)) { /* If same path, no need to re-allocate preview, just clear it up. */ BKE_previewimg_clear(prv); } else { BKE_previewimg_free(&prv); } } if (!prv) { prv = previewimg_deferred_create(path, source); force_update = true; } if (force_update) { if (prv_p) { *prv_p = prv; } else { BLI_ghash_insert(gCachedPreviews, BLI_strdup(name), prv); } } return prv; } Predicted src: void BKE_main_name_copy(const char *name, const char *name) { const char *name = BLI_strdup(name); if (name && name[0] && name[1] && name[1] && name[2] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] && name[3] & ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined tti_rnum() PUSH R13 PUSH R12 XOR R12D,R12D PUSH RBP MOV RBP,RDI PUSH RBX SUB RSP,0x8 MOV byte ptr [RDI],0xff NOP dword ptr [RAX + RAX*0x1] LAB_00108968: CALL sim_poll_kbd ;undefined sim_poll_kbd() TEST EAX,EAX JZ LAB_00108968 TEST AH,0x20 JNZ LAB_00108968 CMP EAX,0xfff JLE LAB_001089c2 AND EAX,0x7f CMP AL,0xd JZ LAB_001089d0 CMP AL,0x7e JZ LAB_001089e0 CMP AL,0x60 JZ LAB_001089e0 MOV R13,qword ptr [.data:tti_to_num] ;= 0011d820 MOVSX EBX,AL MOV ESI,EBX MOV RDI=>.rodata:s_0123456789|=@:;}_0011d820,R13 ;= "0123456789|=@:;}" CALL .plt:::strchr ;char * strchr(char * __s, int __c) MOV EDI,0x7 TEST RAX,RAX JZ LAB_001089b5 SUB RAX,R13 MOV EDI,EBX OR EAX,R12D MOV byte ptr [RBP],AL LAB_001089b5: CALL tto_write ;undefined tto_write() CMP byte ptr [RBP],0xff JZ LAB_00108968 XOR EAX,EAX LAB_001089c2: ADD RSP,0x8 POP RBX POP RBP POP R12 POP R13 RET ?? 0Fh ?? 1Fh ?? 00h LAB_001089d0: MOV byte ptr [RBP],0x7f MOV EDI,0xd JMP LAB_001089b5 ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_001089e0: MOVSX EDI,AL MOV R12D,0x10 JMP LAB_001089b5 ?? 0Fh Actual src: t_stat tti_rnum (int8 *c) { int8 raw, flg = 0; char *cp; t_stat r; *c = -1; /* no char yet */ do { r = tti_read (&raw); /* get char */ if (r!= SCPE_OK) /* error? */ return r; if (raw == '\r') /* return? mark */ *c = 0x7F; else if ((raw == '~') || (raw == '`')) /* flag? mark */ flg = FLAG; else if (cp = strchr (tti_to_num, raw)) /* legal? */ *c = ((int8) (cp - tti_to_num)) | flg; /* assemble char */ else raw = 007; /* beep! */ tto_write (raw); /* echo */ } while (*c == -1); return SCPE_OK; } Predicted src: int poll_poll_poll(char *buf) { int ret; if (poll_poll_poll(buf) == 0) { ret = 1; } else if (poll_poll_poll(buf) == 0) { ret = 1; } else if (poll_poll_poll(buf) == 0) { ret = 1; } else if (poll_poll_poll(buf) == 0) { ret = 1; } else if (poll_poll_poll(buf) == 0) { ret = 1; } else { ret = 1; } return ret; } ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* VNode::collect(std::vector >&) const * ;************************************************************************************************************************************************************ ;undefined collect(VNode * this, vector * param_1) ;this VNode * RDI ;param_1 vector * RSI MOV RAX,qword ptr [this + 0x20] MOV RDX,qword ptr [this + 0x28] SUB RDX,RAX SAR RDX,0x3 TEST EDX,EDX JLE LAB_005291e0 PUSH R13 PUSH R12 MOV R12,this PUSH RBP XOR EBP,EBP PUSH RBX MOV RBX,param_1 SUB RSP,0x8 LAB_00529175: CMP RBP,RDX JNC LAB_005291e1 LEA R13,[RBP*0x8] MOV param_1,qword ptr [RBX + 0x8] LEA RDX,[RAX + R13*0x1] CMP param_1,qword ptr [RBX + 0x10] JZ LAB_005291d0 MOV RDX,qword ptr [RDX] ADD param_1,0x8 MOV qword ptr [param_1 + -0x8],RDX MOV qword ptr [RBX + 0x8],param_1 LAB_0052919f: MOV this,qword ptr [RAX + R13*0x1] MOV param_1,RBX ADD RBP,0x1 CALL VNode::collect ;undefined collect(VNode * this, vect... MOV RAX,qword ptr [R12 + 0x20] MOV RDX,qword ptr [R12 + 0x28] SUB RDX,RAX SAR RDX,0x3 CMP EDX,EBP JG LAB_00529175 ADD RSP,0x8 POP RBX POP RBP POP R12 POP R13 RET ?? 90h LAB_005291d0: MOV this,RBX CALL std::vector>::_M_realloc_insert ;void _M_realloc_insert... MOV RAX,qword ptr [R12 + 0x20] JMP LAB_0052919f ?? 90h LAB_005291e0: RET LAB_005291e1: MOV param_1,RBP LEA this,[.rodata:s_vector::_M_range_check:___n_(whi_00983c78] ;= "vector::_M_range_check: __n (whic... XOR EAX,EAX CALL .plt:::std::__throw_out_of_range_fmt ;undefined __throw_out_of_range_fmt(c... NOP dword ptr CS:[RAX + RAX*0x1] Actual src: void VNode::collect(std::vector& vec) const { for(int i=0; i < numOfChildren(); i++) { vec.push_back(children_.at(i)); children_[i]->collect(vec); } } Predicted src: void Node::insert(const std::vector& v) { v.push_back(v); v.push_back(v); }