============================== Sample 1 ============================== 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 usage(void) { fprintf(stderr, "Usage: %s [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f] [-f [-f] [-f] [-f] [-f] [-f] [-f [-f] [-f] [-f] [-f [-f] [-f] [-f] [-f [-f] [-f] [-f [-f] [-f] [-f [-f] [-f] [-f [-f] [-f [-f] [-f [-f] [-f] [-f [-f] [-f [-f] [-f [-f] [-f [-f] [-f [-f] [-f [-f [-f] [-f [-f] [-f [-f] [-f [-f [-f] [-f [-f [-f] [-f] [-f [-f [-f] [-f [-f [-f] [-f [-f [-f] [-f [-f [-f [-f] [-f [-f [-f [-f [-f] [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f] [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [-f [- ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined allocate_row() PUSH RBX MOV RAX,qword ptr [RDI] MOV RBX,RDI LEA RDI,[RAX + 0x10] CALL .plt:shash_count ;undefined shash_count() MOV R8,RAX MOV RAX,qword ptr [RBX] LEA RDX,[R8 + R8*0x2] MOV RAX,qword ptr [RAX + 0x38] SHL RAX,0x4 LEA RDI,[RAX + RDX*0x8 + 0x48] CALL .plt:xmalloc ;undefined xmalloc() LEA RDX,[RAX + 0x20] MOV qword ptr [RAX + 0x10],RBX MOV qword ptr [RAX + 0x20],RDX MOV qword ptr [RAX + 0x28],RDX LEA RDX,[RAX + 0x30] MOV qword ptr [RAX + 0x18],0x0 MOV qword ptr [RAX + 0x30],RDX MOV qword ptr [RAX + 0x38],RDX MOV qword ptr [RAX + 0x40],0x0 POP RBX RET ?? 66h f Actual src: static struct ovsdb_row * allocate_row(const struct ovsdb_table *table) { size_t n_fields = shash_count(&table->schema->columns); size_t n_indexes = table->schema->n_indexes; size_t row_size = (offsetof(struct ovsdb_row, fields) + sizeof(struct ovsdb_datum) * n_fields + sizeof(struct hmap_node) * n_indexes); struct ovsdb_row *row = xmalloc(row_size); row->table = CONST_CAST(struct ovsdb_table *, table); row->txn_row = NULL; ovs_list_init(&row->src_refs); ovs_list_init(&row->dst_refs); row->n_refs = 0; return row; } Predicted src: static void row_row_init(struct row_row *row) { struct row_row *row = row->row; row->row = row->row; row->row = row->row; row->row = row->row; row->row = row->row; row->row = row->row; row->row = row->row; row->row = row->row; row->row = row->row; row->row = row->row; row->row = row->row; } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined NhlCvtBooleanToString() ;local_10 undefined8 -10 ;local_14 undefined2 -14 ;local_18 undefined4 -18 ;local_28 undefined1[16] -28 PUSH RBX MOV EDX,0x67 MOV RBX,RSI SUB RSP,0x20 MOVDQA XMM0,xmmword ptr [.rodata:s_NhlCvtBooleanToSNhlCvtStringGenA_002b1f70] ;= "NhlCvtBooleanToSNhlCvtStringGenAr... MOV RAX,qword ptr FS:[0x28] MOV qword ptr [RSP + local_10+0x28],RAX XOR EAX,EAX MOV dword ptr [RSP + local_18+0x28],0x6e697274 MOV word ptr [RSP + local_14+0x28],DX MOVAPS xmmword ptr [RSP]=>local_28,XMM0 TEST ECX,ECX JNZ LAB_00158520 MOV EAX,dword ptr [RDI + 0x8] LEA RDX,[.data:false.427] ;= "False" TEST EAX,EAX LEA RAX,[.data:true.428] ;= 0075725400h CMOVZ RAX,RDX MOV EDX,dword ptr [RSI] TEST EDX,EDX JZ LAB_001584f0 MOV RCX,qword ptr [RSI + 0x8] TEST RCX,RCX JZ LAB_001584f0 MOV dword ptr [RSI],0x8 CMP EDX,0x7 JA LAB_00158510 MOV EAX,0xfffffffc LAB_001584d4: MOV RDX,qword ptr [RSP + local_10+0x28] SUB RDX,qword ptr FS:[0x28] JNZ LAB_00158546 ADD RSP,0x20 POP RBX RET ?? 66h f ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_001584f0: MOV dword ptr [RBX],0x8 MOV qword ptr [.bss:val.426],RAX ;=?? LEA RAX,[.bss:val.426] ;=?? MOV qword ptr [RBX + 0x8],RAX=>.bss:val.426 ;=?? MOV EAX,0xffffffff JMP LAB_001584d4 ?? 90h LAB_00158510: MOV qword ptr [RCX],RAX MOV EAX,0xffffffff JMP LAB_001584d4 ?? 66h f ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_00158520: MOV RCX,RSP MOV ESI,0x3e8 MOV EDI,0xfffffffc LEA RDX,[.rodata:s_%s:Called_with_improper_number_o_002af620+48] ;= "%s:Called with improper number of... CALL .plt:NhlPError ;undefined NhlPError(undefined param_... MOV dword ptr [RBX],0x0 MOV EAX,0xfffffffc JMP LAB_001584d4 LAB_00158546: CALL .plt:::__stack_chk_fail ;undefined __stack_chk_fail() NOP dword ptr [RAX + RAX*0x1] Actual src: static NhlErrorTypes NhlCvtBooleanToString CvtArgs { static char true[] = "True"; static char false[] = "False"; char func[] = "NhlCvtBooleanToString"; NhlString tstring; NhlErrorTypes ret = NhlNOERROR; if(nargs!= 0){ NhlPError(NhlFATAL,NhlEUNKNOWN, "%s:Called with improper number of args",func); to->size = 0; return NhlFATAL; } if(from->data.intval) tstring = true; else tstring = false; _NhlSetVal(NhlString,sizeof(NhlString),tstring); } Predicted src: static int SStringToToString(const char *name, const char *value) { int ret; if (name == NULL) { return -1; } if (name == NULL) { return -1; } ret = SStringToString(name, "SString"); if (ret < 0) { return -1; } ret[0] = value; ret[1] = value; ret[2] = value; ret[3] = value; return ret; } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined Dicache_remove() ;local_10 undefined8 -10 ;local_28 undefined4 -28 ;local_68 undefined8 -68 PUSH RBP LEA RDX,[Dicache_entry_cmp] SUB RSP,0x60 MOV RAX,qword ptr FS:[0x28] MOV qword ptr [RSP + local_10+0x68],RAX XOR EAX,EAX MOV qword ptr [RSP]=>local_68,RDI MOV RDI,qword ptr [.bss:CachedIMGs] MOV dword ptr [RSP + local_28+0x68],ESI MOV RSI,RSP CALL dList_find_sorted ;undefined dList_find_sorted() TEST RAX,RAX JZ LAB_0013e783 MOV RDI,qword ptr [.bss:CachedIMGs] MOV RBP,RAX MOV RSI,RAX CALL dList_remove ;undefined dList_remove() MOV RDI,qword ptr [RBP] MOV EAX,dword ptr [RBP + 0x28] SUB dword ptr [.bss:dicache_size_total],EAX CALL a_Url_free ;undefined a_Url_free() MOV RDI,qword ptr [RBP + 0x18] CALL dFree ;undefined dFree() MOV RDI,qword ptr [RBP + 0x30] CALL a_Bitvec_free ;undefined a_Bitvec_free() MOV RDI,qword ptr [RBP + 0x20] CALL a_Imgbuf_unref ;undefined a_Imgbuf_unref() MOV RAX,qword ptr [RBP + 0x48] TEST RAX,RAX JZ LAB_0013e77b MOV RSI,qword ptr [RBP + 0x50] MOV EDI,0x2 CALL RAX LAB_0013e77b: MOV RDI,RBP CALL dFree ;undefined dFree() LAB_0013e783: MOV RAX,qword ptr [RSP + local_10+0x68] SUB RAX,qword ptr FS:[0x28] JNZ LAB_0013e799 ADD RSP,0x60 POP RBP RET LAB_0013e799: CALL .plt:::__stack_chk_fail ;undefined __stack_chk_fail() NOP Actual src: static void Dicache_remove(const DilloUrl *Url, int version) { DICacheEntry e, *entry; _MSG("Dicache_remove url=%s\n", URL_STR(Url)); e.url = (DilloUrl*)Url; e.version = version; entry = dList_find_sorted(CachedIMGs, &e, Dicache_entry_cmp); dReturn_if (entry == NULL); _MSG("Dicache_remove Imgbuf=%p Decoder=%p DecoderData=%p\n", entry->v_imgbuf, entry->Decoder, entry->DecoderData); /* Eliminate this dicache entry */ dList_remove(CachedIMGs, entry); dicache_size_total -= entry->TotalSize; /* entry cleanup */ a_Url_free(entry->url); dFree(entry->cmap); a_Bitvec_free(entry->BitVec); a_Imgbuf_unref(entry->v_imgbuf); if (entry->Decoder) { entry->Decoder(CA_Abort, entry->DecoderData); } dFree(entry); } Predicted src: void entry_free(struct entry *entry) { struct entry *entry; struct entry *entry; entry = entry_find_entry(entry, entry); if (!entry) return; entry = entry_find_entry(entry, entry); if (!entry) { entry_free(entry); entry = entry_find_entry(entry, entry); entry_free(entry); } entry_free(entry); entry_free(entry); } ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined sdl_mixer_init() SUB RSP,0x8 MOVZX EAX,byte ptr [.bss:is_audio_initialized] ;=?? TEST AL,AL JZ LAB_0017987e CMP byte ptr [.bss:audio_open],0x0 ;=?? JZ LAB_0017989d LAB_00179879: ADD RSP,0x8 RET LAB_0017987e: LEA RCX,[.rodata:__PRETTY_FUNCTION__.16] ;= "sdl_mixer_init" MOV EDX,0x2b5 LEA RSI,[.rodata:s_c_utils.c_00253f10] ;= "c_utils.c" LEA RDI,[.rodata:s_is_audio_initialized_00253fd8] ;= "is_audio_initialized" CALL .plt:::__assert_fail ;void __assert_fail(char * __assertio... LAB_0017989d: MOV ECX,0x1000 MOV EDX,0x2 MOV ESI,0x8010 MOV EDI,0xac44 CALL .plt:::Mix_OpenAudio ;undefined Mix_OpenAudio() TEST EAX,EAX JNZ LAB_001798c3 MOV byte ptr [.bss:audio_open],0x1 ;=?? JMP LAB_00179879 LAB_001798c3: MOV byte ptr [.bss:audio_open],0x0 ;=?? LEA RDI,[.rodata:s_Unable_to_open_audio!_00253fed] ;= "Unable to open audio!\r" CALL .plt:::puts ;int puts(char * __s) JMP LAB_00179879 ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined play_mod() PUSH RBP Actual src: void sdl_mixer_init(void) { static const Uint16 audio_format = AUDIO_S16; static const int audio_channels = 2; static const int audio_buffers = 4096; //printf ("sdl_mixer_init called, is_audio_initialized=%d, audio_open=%d\r\n", is_audio_initialized, audio_open); assert (is_audio_initialized); //assert (!audio_open); if (audio_open) /* avoid double initialization */ return; if (Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers)) { audio_open = 0; printf("Unable to open audio!\r\n"); } else { audio_open = 1; } } Predicted src: void audio_audio_init(void) { if (!audio_is_audio) return; audio_is_audio = true; audio_is_audio = false; audio_is_audio = false; audio_is_audio = false; }