============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined measure_select_all() PUSH R12 MOV R12,qword ptr [.bss:sysenv[616]] PUSH RBP PUSH RBX TEST R12,R12 JZ LAB_001513b8 MOV RBX,qword ptr [R12 + 0x168] TEST RBX,RBX JNZ LAB_00151361 JMP LAB_001513a4 ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_00151338: TEST EAX,EAX JLE LAB_00151358 MOV RDI,qword ptr [RBP + 0x10] MOV RDX,R12 XOR ESI,ESI CALL select_core ;undefined select_core() MOV RDI,qword ptr [RBP + 0x18] MOV RDX,R12 XOR ESI,ESI CALL select_core ;undefined select_core() LAB_00151358: MOV RBX,qword ptr [RBX + 0x8] TEST RBX,RBX JZ LAB_001513a4 LAB_00151361: MOV RBP,qword ptr [RBX] MOV EAX,dword ptr [RBP] CMP EAX,0x3 JLE LAB_00151338 CMP EAX,0x4 JNZ LAB_00151358 MOV RDI,qword ptr [RBP + 0x10] MOV RDX,R12 XOR ESI,ESI CALL select_core ;undefined select_core() MOV RDI,qword ptr [RBP + 0x18] MOV RDX,R12 XOR ESI,ESI CALL select_core ;undefined select_core() MOV RDI,qword ptr [RBP + 0x20] MOV RDX,R12 XOR ESI,ESI CALL select_core ;undefined select_core() MOV RBX,qword ptr [RBX + 0x8] TEST RBX,RBX JNZ LAB_00151361 LAB_001513a4: POP RBX MOV EDI,0x1 POP RBP POP R12 JMP redraw_canvas ;undefined redraw_canvas() ?? 66h f ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_001513b8: POP RBX POP RBP POP R12 RET ?? 0Fh Actual src: void measure_select_all(void) { GSList *list; struct model_pak *model; struct measure_pak *m; model = sysenv.active_model; if (!model) return; for (list=model->measure_list ; list ; list=g_slist_next(list)) { m = list->data; switch (m->type) { case MEASURE_INTER: case MEASURE_INTRA: case MEASURE_DISTANCE: select_core(m->core[0], FALSE, model); select_core(m->core[1], FALSE, model); break; case MEASURE_ANGLE: select_core(m->core[0], FALSE, model); select_core(m->core[1], FALSE, model); select_core(m->core[2], FALSE, model); break; } } redraw_canvas(SINGLE); } Predicted src: static void select_all_core(void) { int i; for (i = 0; i < 3; i++) { if (core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->corecore->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->core->corecore->core->core->core->core->core->corecore->core->core->corecore->core->corecore->core->corecore->core->corecore->core->core->core->corecore->core->core->core->corecore->corecore->core->corecore->corecore->corecore->corecore->corecore->core->corecorecore->corecore->corecorecorecore->corecore->corecorecorecorecore->corecorecorecorecore->corecorecorecore->corecorecorecorecorecore->corecorecorecorecorecorecore->corecorecorecorecorecorecorecorecore->corecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecorecor ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined lw_srvchan_close() PUSH RBP MOV RBP,RDI CALL lw_sock_close ;undefined lw_sock_close() MOV RDI,qword ptr [RBP + 0x30] TEST RDI,RDI JZ LAB_00107c0f CALL .plt:::free ;void free(void * __ptr) MOV qword ptr [RBP + 0x30],0x0 LAB_00107c0f: MOV RDI,RBP POP RBP JMP reset ;undefined reset() ?? 0Fh Actual src: void lw_srvchan_close (LW_SRVCHAN * chan) { lw_sock_close (&(chan->sock)); if (chan->map!= NULL) { free (chan->map); chan->map = NULL; } reset (chan); } Predicted src: static void close(void *arg) { struct thread *t = arg; if (t->fd) { close(t->fd); t->fd = NULL; } free(t); } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined __newSnowballStemmer() ;local_28 undefined1[16] -28 PUSH R12 XOR ESI,ESI PUSH RBX SUB RSP,0x18 ; FWD[2,0]: 0017e440,002f4d30 MOVQ XMM0,qword ptr [->__sbstemmer_Stem] ;= 0017e440 MOVHPS XMM0,qword ptr [->__sbstemmer_Free] ;= 0017e510 MOVAPS xmmword ptr [RSP]=>local_28,XMM0 CALL .plt:sb_stemmer_new ;undefined sb_stemmer_new() MOV R12,RAX TEST RAX,RAX JZ LAB_0017e687 MOV EDI,0x18 CALL .plt.got:::malloc ;void * malloc(size_t __size) MOV EDI,0x18 MOV qword ptr [RAX],R12 MOV RBX,RAX MOV qword ptr [RAX + 0x10],0x18 CALL .plt.got:::malloc ;void * malloc(size_t __size) MOV EDI,0x30 MOV byte ptr [RAX],0x2b MOV qword ptr [RBX + 0x8],RAX CALL .plt.got:::malloc ;void * malloc(size_t __size) MOVDQA XMM0,xmmword ptr [RSP]=>local_28 MOV qword ptr [RAX],RBX MOV R12,RAX MOVUPS xmmword ptr [RAX + 0x8],XMM0 LEA RAX,[sbstemmer_Reset] MOV qword ptr [R12 + 0x18],RAX=>sbstemmer_Reset LAB_0017e687: ADD RSP,0x18 MOV RAX,R12 POP RBX POP R12 RET ?? 66h f Actual src: Stemmer *__newSnowballStemmer(const char *language) { struct sb_stemmer *sb = sb_stemmer_new(language, NULL); // No stemmer available for this language if (!sb) { return NULL; } struct sbStemmerCtx *ctx = malloc(sizeof(*ctx)); ctx->sb = sb; ctx->cap = 24; ctx->buf = malloc(ctx->cap); ctx->buf[0] = STEM_PREFIX; Stemmer *ret = malloc(sizeof(Stemmer)); ret->ctx = ctx; ret->Stem = __sbstemmer_Stem; ret->Free = __sbstemmer_Free; ret->Reset = sbstemmer_Reset; return ret; } Predicted src: size_t buf_Reset(void) { buf_t *buf; buf = (buf_t *) malloc(sizeof(buf_t)); if (buf == NULL) { return 0; } buf->buf_size = 0; buf->buf_size = 0; buf->buf_size = 0; buf->buf_size = 0; buf->buf_size = 0; buf->buf_size = 0; return buf; } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined Findjob_new() PUSH R12 MOV R12,RSI MOV ESI,0x1098 PUSH RBP MOV RBP,RDI MOV EDI,0x1 PUSH RBX CALL .plt:::calloc ;void * calloc(size_t __nmemb, size_t... MOV qword ptr [RBP],RAX TEST RAX,RAX JZ LAB_00124294 MOV qword ptr [RAX + 0x8],0x0 MOV RBX,RAX MOV RDI,R12 MOV qword ptr [RAX + 0x10],0x0 MOV RAX,0x100000000 MOV qword ptr [RBX + 0x18],RAX MOV qword ptr [RBX + 0x20],0x0 MOV dword ptr [RBX + 0x28],0x1 MOV qword ptr [RBX + 0x30],0x0 MOV qword ptr [RBX + 0x38],0x0 MOV qword ptr [RBX + 0x40],0x0 MOV dword ptr [RBX + 0x50],0x0 MOV qword ptr [RBX + 0x58],0x0 CALL .plt:::strdup ;char * strdup(char * __s) MOV qword ptr [RBX],RAX TEST RAX,RAX JZ LAB_00124280 MOV qword ptr [RBX + 0x60],0x0 XOR EDX,EDX LEA RDI,[RBX + 0x8] MOV R8D,0x2 MOV qword ptr [RBX + 0x68],0x0 LEA RCX,[.rodata:s_-find_001b5130+80] ;= "-find" MOV RSI,RBX MOV qword ptr [RBX + 0x70],0x0 MOV qword ptr [RBX + 0x78],0x0 MOV byte ptr [RBX + 0x84],0x0 MOV qword ptr [RBX + 0x1084],0x0 MOV qword ptr [RBX + 0x108c],0x0 CALL Exprnode_new ;undefined Exprnode_new() TEST EAX,EAX JLE LAB_00124280 MOV RAX,qword ptr [RBX + 0x8] MOV qword ptr [RBX + 0x10],RAX MOV EAX,0x1 LAB_00124276: POP RBX POP RBP POP R12 RET ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_00124280: MOV RDI,RBP XOR ESI,ESI CALL Findjob_destroy ;undefined Findjob_destroy() POP RBX MOV EAX,0xffffffff POP RBP POP R12 RET LAB_00124294: OR EAX,0xffffffff JMP LAB_00124276 ?? 0Fh Actual src: int Findjob_new(struct FindjoB **o, char *start_path, int flag) { struct FindjoB *m; int ret; m= *o= TSOB_FELD(struct FindjoB,1); if(m==NULL) return(-1); m->start_path= NULL; m->test_tree= NULL; m->cursor= NULL; m->invert= 0; m->use_shortcuts= 1; m->action= 0; /* print */ m->prune= 0; m->use_pattern= 1; m->target= NULL; /* a mere pointer, not managed memory */ m->text_2= NULL; /* a mere pointer, not managed memory */ m->user= 0; m->group= 0; m->type= 0; m->date= 0; m->start_path= strdup(start_path); if(m->start_path==NULL) goto failed; m->found_path= NULL; m->estim_upper_size= 0; m->estim_lower_size= 0; m->subjob= NULL; m->errmsg[0]= 0; m->errn= 0; m->match_count= 0; m->depth= 0; ret= Exprnode_new(&(m->test_tree), m, NULL, "-find", (m->use_shortcuts)<<1); if(ret<=0) goto failed; m->cursor= m->test_tree; return(1); failed:; Findjob_destroy(o, 0); return(-1); } Predicted src: int job_job_new(job_t *job, const char *name) { job_job_t *job; job = calloc(1, sizeof(job_job_t)); if (job == NULL) return -1; job->job_name = strdup(name); job->job_name = strdup(name); job->job_name = NULL; job->job_name = NULL; job->job_name = NULL; job->job_name = NULL; job->job_name = NULL; job->job_name = NULL; job->job_name = NULL; job->job_name = NULL; job->job_name = NULL; job->job_name = NULL; job->job_name = NULL; job->job_name = NULL; job->job_name = NULL; job->job_name = NULL; job->job_name = NULL; job->job_flags = 0; job->job_flags = 0; job->job_flags = 0; job->job_flags = 0; job->job_flags = 0; job->job_flags = 0; job->job_flags = 0; job->job_flags = 0; job->job_flags = 0; job->job_flags = 0; return 0; } ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined rpmcpioFree() TEST RDI,RDI JZ LAB_00126500 PUSH RBP CMP qword ptr [RDI],0x0 MOV RBP,RDI JZ LAB_001264f4 CALL .plt:rpmcpioClose ;undefined rpmcpioClose() LAB_001264f4: MOV RDI,RBP CALL .plt.got:::free ;void free(void * __ptr) XOR EAX,EAX POP RBP RET LAB_00126500: XOR EAX,EAX RET ?? 66h f Actual src: rpmcpio_t rpmcpioFree(rpmcpio_t cpio) { if (cpio) { if (cpio->fd) (void) rpmcpioClose(cpio); free(cpio); } return NULL; } Predicted src: static int CloseClose(void *data) { if (data == NULL) return -1; free(data); return 0; }