============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined mi_free_size_aligned() MOV R8,RDX MOV RAX,RDI XOR EDX,EDX PUSH R12 DIV R8 PUSH RBP MOV R12,RSI SUB RSP,0x8 MOV RBP,RDI TEST RDX,RDX JNZ LAB_003191c0 ADD RSP,0x8 MOV RSI,R12 MOV RDI,RBP POP RBP POP R12 JMP mi_free_size ;undefined mi_free_size() ?? 90h LAB_003191c0: LEA RCX,[.rodata:__func__.3] ;= "mi_free_size_aligned" MOV EDX,0x219 LEA RSI,[.rodata:s_./extlib/mimalloc/src/alloc.c_003c138d] ;= "./extlib/mimalloc/src/alloc.c" LEA RDI,[.rodata:s_((uintptr_t)p_%_alignment)_==_0_003c1330] ;= "((uintptr_t)p % alignment) == 0" CALL _mi_assert_fail ;undefined _mi_assert_fail() ?? EBh ?? CCh ?? 66h f Actual src: void mi_free_size_aligned(void* p, size_t size, size_t alignment) mi_attr_noexcept { UNUSED_RELEASE(alignment); mi_assert(((uintptr_t)p % alignment) == 0); mi_free_size(p,size); } Predicted src: static void _free(void *data, void *data) { struct _data *data = data; struct _data *data = data; data = data; data = data; data = data; data = data; data->data = data; data->data = data; data->data = data; data->data = data; data->data = data; data->data = data; } ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined e_google_book_chooser_button_init() MOVSXD RAX,dword ptr [.bss:EGoogleBookChooserButton_private_offset] ;=?? ADD RAX,RDI MOV qword ptr [RDI + 0x38],RAX RET ?? 90h Actual src: static void e_google_book_chooser_button_init (EGoogleBookChooserButton *button) { button->priv = e_google_book_chooser_button_get_instance_private (button); } Predicted src: static void gimp_init (GObject * klass) { g_return_if_fail (klass!= NULL); self->priv->priv = FALSE; self->priv->priv->priv->priv = NULL; } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined _cffi_d_ncprogbar_destroy() JMP .plt:ncprogbar_destroy ?? 66h f Actual src: static void _cffi_d_ncprogbar_destroy(struct ncprogbar * x0) { ncprogbar_destroy(x0); } Predicted src: static void _cffi_destroy(void *data) { _destroy_destroy(data); } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined exec_generic() ;local_40 undefined8 -40 ;local_140 undefined8 -140 ;local_148 undefined8 -148 ;local_150 undefined8 -150 ;local_154 undefined4 -154 PUSH R15 LEA RCX,[.data:games] MOV R15D,0x1 PUSH R14 PUSH R13 MOV R13,RDI PUSH R12 PUSH RBP LEA RBP,[.rodata:delim] ;= 000A092000h PUSH RBX SUB RSP,0x128 MOV dword ptr [RSP + local_154+0x158],ESI LEA R12=>local_148,[RSP + 0x10] MOV RAX,qword ptr FS:[0x28] MOV qword ptr [RSP + local_40+0x158],RAX MOV RAX,qword ptr [RDI] MOV EAX,dword ptr [RAX + 0x5c] MOV qword ptr [RSP + local_150+0x158],RAX IMUL RAX,RAX,0x138 MOV RDI,qword ptr [RCX + RAX*0x1 + offset.data:games[192] &0xff] CALL strdup_strip ;undefined strdup_strip() MOV RSI=>.rodata:delim,RBP ;= 000A092000h MOV RDI,RAX MOV R14,RAX CALL .plt:::strtok ;char * strtok(char * __s, char * __d... MOV qword ptr [RSP + local_148+0x158],RAX NOP dword ptr [RAX] LAB_00145bf8: MOV RSI=>.rodata:delim,RBP ;= 000A092000h XOR EDI,EDI MOVSXD RBX,R15D CALL .plt:::strtok ;char * strtok(char * __s, char * __d... MOV qword ptr [R12 + R15*0x8]=>local_140,RAX ADD R15,0x1 TEST RAX,RAX JNZ LAB_00145bf8 MOV RDX,qword ptr [R13 + 0x8] MOV EAX,EBX TEST RDX,RDX JZ LAB_00145c25 MOV qword ptr [RSP + RBX*0x8 + local_140+0x150],RDX ADD EAX,0x1 LAB_00145c25: CDQE LEA RBX,[.data:games] MOV EDI,dword ptr [RSP + local_154+0x158] MOV RDX,R12 MOV qword ptr [RSP + RAX*0x8 + local_140+0x150],0x0 MOV RCX,qword ptr [R13] IMUL RAX,qword ptr [RSP + local_150+0x158],0x138 MOV RSI,qword ptr [RBX + RAX*0x1 + offset.data:games[208] &0xff] CALL client_launch_exec ;undefined client_launch_exec() MOV RDI,R14 MOV R12D,EAX CALL .plt.got:::g_free ;undefined g_free() MOV RAX,qword ptr [RSP + local_40+0x158] SUB RAX,qword ptr FS:[0x28] JNZ LAB_00145c8b ADD RSP,0x128 MOV EAX,R12D POP RBX POP RBP POP R12 POP R13 POP R14 POP R15 RET LAB_00145c8b: CALL .plt:::__stack_chk_fail ;undefined __stack_chk_fail() ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined ottd_exec() ;local_40 undefined8 -40 ;local_140 undefined8 -140 ;local_148 undefined8 -148 ;local_150 undefined8 -150 ;local_154 undefined4 -154 PUSH R15 Actual src: static int exec_generic (const struct condef *con, int forkit) { char *argv[32]; int argi = 0; char *cmd; struct game *g = &games[con->s->type]; int retval; cmd = strdup_strip (g->cmd); argv[argi++] = strtok (cmd, delim); while ((argv[argi] = strtok (NULL, delim))!= NULL) argi++; if (con->server) { argv[argi++] = con->server; } argv[argi] = NULL; retval = client_launch_exec (forkit, g->real_dir, argv, con->s); g_free (cmd); return retval; } Predicted src: static void g_free (const char *name) { const char *name = NULL; const char *name = NULL; char *name = NULL; char *name = NULL; char *name = NULL; char *name = NULL; char *name = NULL; char *name = NULL; char *name = NULL; char *name = NULL; char *name = NULL; char *name = NULL; char *name = NULL; char *name = NULL; char *name = NULL; char *name = NULL; char *name; char *name = NULL; char *name; char *name = NULL; char *name; char *name = NULL; char *name; char *name; char *name = NULL; char *name; char *name; char *name = NULL; char *name; char *name = NULL; char *name; char *name = NULL; char *name; char *name = NULL; char *name; char *name = NULL; char *name; char *name; char *name; char *name = NULL; char *name; char *name; char *name; char *name; char *name = *name; char *name; char *name = *name; char *name; char *name; char *name = *name; char *name; char *name; char *name; char *name = *name; char *name; char *name = *name; char *name; char *name; char *name; char *name = *name; char *name; char *name; char *name = *name; char *name; char *name; char *name = *name; char *name; char *name; char *name = *name; char *name; char *name; char *name; char *name; char *name = *name; char *name; char *name; char *name; char *name = *name; char *name; char *name; char *name; char *name; char *name = *name; char *name; char *name; char *name = *name; char *name; char *name; char *name; char *name = *name; char *name; char *name; char *name; char *name = *name; char *name; char *name = *name; char *name; char *name; char *name = *name; char *name; char *name; char *name = *name; char *name; char *name; char *name; char *name; char *name = *name; char *name; char *name; char *name; char *name = *name; char *name; char *name; char *name; char *name; char *name; char *name = *name; char *name; char *name; char *name; char *name; char *name = *name; char *name; char *name = *name; char *name; char *name = *name; char *name; char *name; char *name; char *name; char *name; char *name = *name; char *name; char *name; char *name; char *name; char *name = *name; char *name; char *name; char *name = *name; char *name; char *name = *name; char *name; char *name; char *name; ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* QCA::CRLEntry::time() const * ;************************************************************************************************************************************************************ ;undefined time(void) PUSH R12 ADD RSI,0x8 MOV R12,RDI CALL .plt:::QDateTime::QDateTime ;undefined QDateTime(QDateTime * this... MOV RAX,R12 POP R12 RET ?? 66h f Actual src: QDateTime CRLEntry::time() const { return _time; } Predicted src: const std::string& size() const { return d->size; }