============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined smime_free_privacydata() PUSH RBP MOV RBP,RDI MOV RDI,qword ptr [RDI + 0x18] CALL .plt:::gpgme_release ;undefined gpgme_release() MOV RDI,RBP POP RBP JMP .plt:::g_free ;undefined g_free() ?? 66h f Actual src: static void smime_free_privacydata(PrivacyData *_data) { PrivacyDataPGP *data = (PrivacyDataPGP *) _data; gpgme_release(data->ctx); g_free(data); } Predicted src: void free_data_release (struct _data *data) { g_free (data->data); g_free (data); } ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined gdm_dbus_chooser_skeleton_init() PUSH RBX MOV RBX,RDI MOVSXD RDI,dword ptr [.bss:GdmDBusChooserSkeleton_private_offset] ADD RDI,RBX MOV qword ptr [RBX + 0x20],RDI ADD RDI,0x20 CALL .plt:::g_mutex_init ;undefined g_mutex_init() MOV RBX,qword ptr [RBX + 0x20] CALL .plt:::g_main_context_ref_thread_default ;undefined g_main_context_ref_thread_... MOV qword ptr [RBX + 0x18],RAX POP RBX RET ?? 66h f Actual src: static void gdm_dbus_chooser_skeleton_init (GdmDBusChooserSkeleton *skeleton) { #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 skeleton->priv = gdm_dbus_chooser_skeleton_get_instance_private (skeleton); #else skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, GDM_DBUS_TYPE_CHOOSER_SKELETON, GdmDBusChooserSkeletonPrivate); #endif g_mutex_init (&skeleton->priv->lock); skeleton->priv->context = g_main_context_ref_thread_default (); } Predicted src: static void gkd_dbus_skeleton_init (GkdDBusSkeleton *skeleton) { #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_ALLOWED >= GLIB_VERSION_2_38 skeleton->priv = gkd_dbus_skeleton_get_instance_private (skeleton); #else skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, G_TYPE_INSTANCE_SKELETON, GkdDBusDBusSkeletonPrivate); #endif g_mutex_init (&skeleton->priv->lock); skeleton->priv->context = gkd_dbus_context_ref_thread_default (); } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined cob_intr_test_numval_c() SUB RSP,0x8 XOR ECX,ECX MOV EDX,0x1 CALL .plt:cob_check_numval ;undefined cob_check_numval() MOV EDI,EAX CALL cob_alloc_set_field_int ;undefined cob_alloc_set_field_int() MOV RAX,qword ptr [.bss:curr_field] ;=?? ADD RSP,0x8 RET ?? 66h f Actual src: cob_field * cob_intr_test_numval_c (cob_field *srcfield, cob_field *currency) { cob_alloc_set_field_int (cob_check_numval (srcfield, currency, 1, 0)); return curr_field; } Predicted src: static int test_field_num_alloc(void) { test_field_num_set(test_field_num); return 0; } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined Wayland_DeleteDevice() PUSH R12 PUSH RBP MOV RBP,RDI SUB RSP,0x8 MOV R12,qword ptr [RDI + 0x5a8] MOV RDI,qword ptr [R12 + 0x8] TEST RDI,RDI JZ LAB_0020ea92 LEA RAX,[.bss:WAYLAND_wl_display_flush] ;=?? CALL qword ptr [RAX]=>.bss:WAYLAND_wl_display_flush ;=?? LEA RAX,[.bss:WAYLAND_wl_display_disconnect] ;=?? MOV RDI,qword ptr [R12 + 0x8] CALL qword ptr [RAX]=>.bss:WAYLAND_wl_display_disconnect ;=?? LAB_0020ea92: MOV RDI,qword ptr [RBP + 0x2b0] TEST RDI,RDI JZ LAB_0020eaa3 CALL SDL_DestroyMutex_REAL ;undefined SDL_DestroyMutex_REAL() LAB_0020eaa3: MOV RDI,R12 CALL SDL_free_REAL ;undefined SDL_free_REAL() MOV RDI,RBP CALL SDL_free_REAL ;undefined SDL_free_REAL() ADD RSP,0x8 POP RBP POP R12 JMP SDL_WAYLAND_UnloadSymbols ;undefined SDL_WAYLAND_UnloadSymbols() ?? 90h Actual src: static void Wayland_DeleteDevice(SDL_VideoDevice *device) { SDL_VideoData *data = (SDL_VideoData *)device->driverdata; if (data->display) { WAYLAND_wl_display_flush(data->display); WAYLAND_wl_display_disconnect(data->display); } if (device->wakeup_lock) { SDL_DestroyMutex(device->wakeup_lock); } SDL_free(data); SDL_free(device); SDL_WAYLAND_UnloadSymbols(); } Predicted src: void SDL_Destroy(SDL_Device *device) { if (!device) { return; } SDL_free(device->device); SDL_free(device->device); SDL_free(device->device); SDL_free(device); } ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined txn_body_cleanup_txn_changes() MOV R8,RDI MOV RCX,qword ptr [RSI + 0x10] MOV RDI,qword ptr [RSI + 0x8] MOV RDX,RSI MOV RSI,qword ptr [R8] JMP .plt:LAB_00109bc0 ?? 66h f Actual src: static svn_error_t * txn_body_cleanup_txn_changes(void *baton, trail_t *trail) { const char *key = *(const char **)baton; return svn_fs_bdb__changes_delete(trail->fs, key, trail, trail->pool); } Predicted src: static void var_cleanup_cleanup(void *data, void *user_data) { struct _var *var = user_data; struct _var *var = user_data; struct _var *var = user_data; var_cleanup_cleanup(var); }