============================== Sample 1 ============================== 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 *py_get_obj(PyObject *obj, PyObject *obj) { return py_obj->obj; } ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;void wine_alEffectiv(ALuint eid, ALenum param, ALint * values) ;eid ALuint EDI ;param ALenum ESI ;values ALint * RDX ;local_18 undefined1 -18 ;local_30 undefined1[16] -30 ;local_40 undefined1[16] -40 ;local_50 undefined1[16] -50 ;local_60 undefined1[16] -60 ;local_70 undefined1[16] -70 ;local_80 undefined1[16] -80 ;local_90 undefined1[16] -90 ;local_a0 undefined1[16] -a0 ;local_b0 undefined1[16] -b0 ;local_c0 undefined1[16] -c0 PUSH RBP MOV RBP,RSP PUSH eid MOV eid,ECX PUSH param MOV param,values MOV values,R8 SUB RSP,0xa0 AND RSP,-0x10 MOVAPS xmmword ptr [RSP]=>local_c0,XMM6 MOVAPS xmmword ptr [RSP + local_b0[0]+0xc0],XMM7 MOVAPS xmmword ptr [RSP + local_a0[0]+0xc0],XMM8 MOVAPS xmmword ptr [RSP + local_90[0]+0xc0],XMM9 MOVAPS xmmword ptr [RSP + local_80[0]+0xc0],XMM10 MOVAPS xmmword ptr [RSP + local_70[0]+0xc0],XMM11 MOVAPS xmmword ptr [RSP + local_60[0]+0xc0],XMM12 MOVAPS xmmword ptr [RSP + local_50[0]+0xc0],XMM13 MOVAPS xmmword ptr [RSP + local_40[0]+0xc0],XMM14 MOVAPS xmmword ptr [RSP + local_30[0]+0xc0],XMM15 CALL qword ptr [.bss:alEffectiv] ;= NaP MOVAPS XMM6,xmmword ptr [RSP]=>local_c0 MOVAPS XMM7,xmmword ptr [RSP + local_b0[0]+0xc0] MOVAPS XMM8,xmmword ptr [RSP + local_a0[0]+0xc0] MOVAPS XMM9,xmmword ptr [RSP + local_90[0]+0xc0] MOVAPS XMM10,xmmword ptr [RSP + local_80[0]+0xc0] MOVAPS XMM11,xmmword ptr [RSP + local_70[0]+0xc0] MOVAPS XMM12,xmmword ptr [RSP + local_60[0]+0xc0] MOVAPS XMM13,xmmword ptr [RSP + local_50[0]+0xc0] MOVAPS XMM14,xmmword ptr [RSP + local_40[0]+0xc0] MOVAPS XMM15,xmmword ptr [RSP + local_30[0]+0xc0] LEA RSP=>local_18,[RBP + -0x10] POP param POP eid POP RBP RET ?? 66h f Actual src: static ALvoid CDECL wine_alEffectiv(ALuint eid, ALenum param, const ALint* values) { alEffectiv(eid, param, values); } Predicted src: static int get_p(void) { return 0; } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined usage() PUSH RBP LEA R9,[.rodata:s_[-h_home]_[-P_password]_[-t_btre_001055c0] ;= "[-h home] [-P password] [-t btree... MOV ESI,0x1 XOR EAX,EAX PUSH RBX LEA R8,[.rodata:s_[-nTV]_[-c_name=value]_[-f_file]_00105608] ;= "[-nTV] [-c name=value] [-f file]" LEA RDX,[.rodata:s_usage:_%s_%s_%s_001051c6] ;= "usage: %s %s\n\t%s\n" SUB RSP,0x8 LEA RBP,[.bss:progname] ;=?? MOV RBX,qword ptr [->stderr] ;= 00108120 MOV RCX,qword ptr [RBP]=>.bss:progname ;=?? MOV RDI,qword ptr [RBX]=>EXTERNAL:stderr ;=?? CALL .plt:::__fprintf_chk ;undefined __fprintf_chk() MOV RCX,qword ptr [RBP]=>.bss:progname ;=?? MOV RDI,qword ptr [RBX]=>EXTERNAL:stderr ;=?? XOR EAX,EAX LEA R8,[.rodata:s_-r_lsn_|_fileid_[-h_home]_[-P_pa_00105630] ;= "-r lsn | fileid [-h home] [-P pas... LEA RDX,[.rodata:s_usage:_%s_%s_001051d8] ;= "usage: %s %s\n" MOV ESI,0x1 CALL .plt:::__fprintf_chk ;undefined __fprintf_chk() ADD RSP,0x8 MOV EAX,0x1 POP RBX POP RBP RET ?? 0Fh Actual src: int usage() { (void)fprintf(stderr, "usage: %s %s\n\t%s\n", progname, "[-nTV] [-c name=value] [-f file]", "[-h home] [-P password] [-t btree | hash | recno | queue] db_file"); (void)fprintf(stderr, "usage: %s %s\n", progname, "-r lsn | fileid [-h home] [-P password] db_file"); return (EXIT_FAILURE); } Predicted src: static void set_name(void) { fprintf(stderr, "%s: %s\n", name); fprintf(stderr, "%s: %s\n", name); fprintf(stderr); } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined f9_V_SPP_PDP() ;local_10 undefined8 -10 ;local_18 undefined8 -18 PUSH RBP MOV RBP,RSP MOV qword ptr [RBP + local_10+0x8],RDI MOV qword ptr [RBP + local_18+0x8],RSI NOP POP RBP RET ?? 90h Actual src: void f9_V_SPP_PDP(struct S_PDP p0, void* p1, void* p2) { } Predicted src: void f6_V_FF(void* p0, void* p1, void* p2) { } ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined ioe_err_free() PUSH RBX MOV RBX,RDI MOV RDI,qword ptr [RDI] CALL .plt:free ;void free(void * __ptr) MOV RDI,qword ptr [RBX + 0x10] POP RBX JMP .plt:free ;void free(void * __ptr) ?? 66h f Actual src: void ioe_err_free(ioe_err_t *err) { free(err->path); free(err->msg); } Predicted src: static void free_free(struct v) { free(v->v); free(v->v); }