============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined speechd_new() PUSH R12 XOR ECX,ECX XOR EDX,EDX LEA RSI,[.rodata:DAT_00102000] ;= 6Dh m PUSH RBP PUSH RBX MOV RBX,RDI LEA RDI,[.rodata:s_navit_00102005] ;= "navit" CALL .plt:::spd_open ;undefined spd_open() TEST RAX,RAX JZ LAB_001011d0 MOV EDI,0x8 MOV RBP,RAX CALL .plt:g_malloc ;undefined g_malloc() MOV R12,RAX TEST RAX,RAX JZ LAB_001011c3 MOVDQA XMM0,xmmword ptr [.data.rel.ro:speechd_meth] MOV qword ptr [RAX],RBP MOV ESI,0x1 MOV RDI,RBP MOVUPS xmmword ptr [RBX],XMM0 CALL .plt:::spd_set_punctuation ;undefined spd_set_punctuation() LAB_001011c3: MOV RAX,R12 POP RBX POP RBP POP R12 RET ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_001011d0: XOR R12D,R12D POP RBX POP RBP MOV RAX,R12 POP R12 RET ?? 0Fh Actual src: static struct speech_priv *speechd_new(struct speech_methods *meth, struct attr **attrs, struct attr *attr) { struct speech_priv *this; SPDConnection *conn; conn = spd_open("navit","main",NULL,SPD_MODE_SINGLE); if (! conn) return NULL; this=g_new(struct speech_priv,1); if (this) { this->conn=conn; *meth=speechd_meth; spd_set_punctuation(conn, SPD_PUNCT_NONE); } return this; } Predicted src: static void *open(const char *filename) { struct file *file; file = g_new0(struct file, 1); if (!file) return NULL; file->filename = g_new0(struct file, 1); file->filename = g_strdup(filename); return file; } ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined vncRandRGetOutputName() PUSH R12 MOVSXD RDI,EDI PUSH RBP SUB RSP,0x8 MOV RSI,qword ptr [.bss:randrGlueContext[8]] MOV RAX,qword ptr [RSI + 0x28] MOV RDX,qword ptr [RAX + RDI*0x8] MOV RDI,qword ptr [.bss:randrGlueContext] CALL .plt:::XRRGetOutputInfo ;undefined XRRGetOutputInfo() TEST RAX,RAX JZ LAB_00139f60 MOV RDI,qword ptr [RAX + 0x10] MOV RBP,RAX CALL .plt:::strdup ;char * strdup(char * __s) MOV RDI,RBP MOV R12,RAX CALL .plt:::XRRFreeOutputInfo ;undefined XRRFreeOutputInfo() ADD RSP,0x8 MOV RAX,R12 POP RBP POP R12 RET ?? 0Fh ?? 1Fh ?? 40h @ ?? 00h LAB_00139f60: ADD RSP,0x8 LEA RDI,[.rodata:s__00173901+14] ;= "" POP RBP POP R12 JMP .plt:::strdup ;char * strdup(char * __s) ?? 66h f Actual src: char *vncRandRGetOutputName(int outputIdx) { vncGlueContext *ctx = &randrGlueContext; XRROutputInfo *output = XRRGetOutputInfo(ctx->dpy, ctx->res, ctx->res->outputs[outputIdx]); if (!output) { return strdup(""); } char *ret = strdup(output->name); XRRFreeOutputInfo(output); return ret; } Predicted src: static void NameInfo(int argc, char **argv) { if (argc!= 2) { char *s; char *s; char *s; s = (char *)NULL; s = (char *)NULL; s = (char *)NULL; s = (char *)NULL; s = (char *)NULL; s = (char *)NULL; s = (char *)NULL; free(s); } } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* idAnimBlend::GetCycleCount() const * ;************************************************************************************************************************************************************ ;undefined GetCycleCount(idAnimBlend * this) ;this idAnimBlend * RDI MOVSX EAX,word ptr [this + 0x34] RET ?? 90h Actual src: int idAnimBlend::GetCycleCount( void ) const { return cycle; } Predicted src: uint32_t id_id::GetidCount() const { return m_idCount; } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined cmdServerSigChild() MOV RDI,qword ptr [.bss:serverLocal[24]] MOV EAX,dword ptr [RDI] TEST EAX,EAX JZ LAB_0014d0c0 PUSH RBP MOV RBP,RSI PUSH RBX XOR EBX,EBX SUB RSP,0x8 JMP LAB_0014d08e ?? 66h f ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_0014d080: MOV RDI,qword ptr [.bss:serverLocal[24]] ADD EBX,0x1 CMP dword ptr [RDI],EBX JBE LAB_0014d0b8 LAB_0014d08e: MOV ESI,EBX CALL lstGet ;undefined lstGet() MOV EDX,dword ptr [RBP + 0x10] CMP dword ptr [RAX],EDX JNZ LAB_0014d080 MOV RDI,qword ptr [.bss:serverLocal[24]] MOV ESI,EBX ADD EBX,0x1 CALL lstRemoveIdx ;undefined lstRemoveIdx() MOV RDI,qword ptr [.bss:serverLocal[24]] CMP dword ptr [RDI],EBX JA LAB_0014d08e LAB_0014d0b8: ADD RSP,0x8 POP RBX POP RBP RET ?? 90h LAB_0014d0c0: RET ?? 66h f Actual src: static void cmdServerSigChild(const int signalType, siginfo_t *signalInfo, void *context) { (void)signalType; (void)context; ASSERT(signalInfo->si_code == CLD_EXITED); // Find the process and remove it for (unsigned int processIdx = 0; processIdx < lstSize(serverLocal.processList); processIdx++) { if (*(int *)lstGet(serverLocal.processList, processIdx) == signalInfo->si_pid) lstRemoveIdx(serverLocal.processList, processIdx); } } Predicted src: static void serverserverserverserver(serverserver_t *server, server_t *server) { int i; for (i = 0; i < server->serverserver.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.serverserver.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.server.serverserver.server.server.server.server.server.server.server.server.server.server.server.serverserver.server.server.server.server.serverserver.server.server.server.serverserver.server.serverserver.server.server.serverserver.server.serverserver.server.serverserver.server.server.serverserver.serverserver.serverserver.server.server.serverserver.server.serverserver.serverserver.serverserver.serverserver.serverserver.serverserver.server.serverserver.serverserver.serverserver.serverserver.serverserverserver.serverserverserver.serverserverserver.serverserver.serverserverserverserverserver.serverserverserverserverserverserver.serverserverserver.serverserverserverserverserverserver.serverserverserverserverserverserverserverserverserverserver.serverserverserverserverserver.serverserverserverserverserverserverserverserverserverserverserverserverserver.serverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserver.serverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserver.serverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserverserve ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined mX11ClipboardDestroy() TEST RDI,RDI JZ LAB_00143770 PUSH RBP MOV RBP,RDI MOV RDI,qword ptr [RDI + 0x8] CALL mFree ;undefined mFree() MOV qword ptr [RBP + 0x8],0x0 MOV RDI,qword ptr [RBP + 0x18] CALL mFree ;undefined mFree() MOV qword ptr [RBP + 0x18],0x0 MOV RDI,RBP MOV dword ptr [RBP],0x0 POP RBP JMP mFree ;undefined mFree() ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_00143770: RET ?? 66h f Actual src: void mX11ClipboardDestroy(mX11Clipboard *p) { if(p) { mX11ClipboardFreeDat(p); mFree(p); } } Predicted src: void mFree(m) m *m; { if (m) { mFree(m->m); mFree(m->m); m->m = NULL; } mFree(m); }