============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined menu_media_disk_disciple_drive2_saveas() MOV ESI,0x152 JMP menu_media_save ;undefined menu_media_save() ?? 66h f Actual src: static MENU_CALLBACK( menu_media_disk_disciple_drive2_saveas ) { menu_media_save( gtk_action, 0x152 ); } Predicted src: static int save_media_save_save_save_save_save_save(fz_context *ctx) { return (save_save_save_save_save(ctx, false)); } ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined MPI_Type_hvector() ;local_20 undefined8 -20 ;local_28 undefined8 -28 PUSH R13 MOV R13,RDX PUSH R12 MOV R12D,ESI PUSH RBP MOV EBP,EDI SUB RSP,0x10 MOV RAX,qword ptr [->ompi_mpi_param_check] ;= 0021a918 CMP byte ptr [RAX]=>.data:ompi_mpi_param_check,0x0 ;= 01h JZ LAB_00199df8 MOV RAX,qword ptr [->ompi_mpi_state] ;= 0023b2f4 MOV EAX=>.bss:ompi_mpi_state,dword ptr [RAX] ;=?? SUB EAX,0x2 CMP EAX,0x2 JA LAB_00199e68 LAB_00199dd2: CMP RCX,qword ptr [->ompi_mpi_datatype_null] ;= 00225120 SETZ AL TEST RCX,RCX SETZ DL OR AL,DL JNZ LAB_00199e10 TEST R8,R8 JZ LAB_00199e10 TEST EBP,EBP JS LAB_00199e98 TEST R12D,R12D JS LAB_00199e40 LAB_00199df8: ADD RSP,0x10 MOV RDX,R13 MOV ESI,R12D MOV EDI,EBP POP RBP POP R12 POP R13 JMP .plt:LAB_0012a220 ?? 66h f ?? 90h LAB_00199e10: MOV RSI=>.bss:ompi_mpi_comm_world,qword ptr [->ompi_mpi_comm_world] ;= 00229ee0 ;=?? LEA R8,[.rodata:FUNC_NAME] ;= "MPI_Type_hvector" MOV ECX,0x3 MOV EDX,dword ptr [RSI + 0x140]=>.bss:ompi_mpi_comm_world[320] MOV RDI,qword ptr [RSI + 0x138]=>.bss:ompi_mpi_comm_world[312] LAB_00199e30: ADD RSP,0x10 POP RBP POP R12 POP R13 JMP .plt:ompi_errhandler_invoke ;undefined ompi_errhandler_invoke() ?? 66h f ?? 90h LAB_00199e40: MOV RSI,qword ptr [->ompi_mpi_comm_world] ;= 00229ee0 LEA R8,[.rodata:FUNC_NAME] ;= "MPI_Type_hvector" MOV ECX,0xd MOV EDX,dword ptr [RSI + 0x140]=>.bss:ompi_mpi_comm_world[320] MOV RDI,qword ptr [RSI + 0x138]=>.bss:ompi_mpi_comm_world[312] JMP LAB_00199e30 ?? 66h f ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_00199e68: LEA RDX,[.rodata:FUNC_NAME] ;= "MPI_Type_hvector" XOR ESI,ESI XOR EDI,EDI XOR EAX,EAX MOV qword ptr [RSP + local_20+0x28],R8 MOV qword ptr [RSP]=>local_28,RCX CALL .plt.got:ompi_mpi_errors_are_fatal_comm_handler ;undefined ompi_mpi_errors_are_fatal_... MOV R8,qword ptr [RSP + local_20+0x28] MOV RCX,qword ptr [RSP]=>local_28 JMP LAB_00199dd2 ?? 0Fh ?? 1Fh ?? 80h ?? 00h ?? 00h ?? 00h ?? 00h LAB_00199e98: MOV RSI,qword ptr [->ompi_mpi_comm_world] ;= 00229ee0 LEA R8,[.rodata:FUNC_NAME] ;= "MPI_Type_hvector" MOV ECX,0x2 MOV EDX,dword ptr [RSI + 0x140]=>.bss:ompi_mpi_comm_world[320] MOV RDI,qword ptr [RSI + 0x138]=>.bss:ompi_mpi_comm_world[312] JMP LAB_00199e30 ?? 0Fh Actual src: int MPI_Type_hvector(int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype, MPI_Datatype *newtype) { MEMCHECKER( memchecker_datatype(oldtype); ); if ( MPI_PARAM_CHECK ) { OMPI_ERR_INIT_FINALIZE(FUNC_NAME); if (NULL == oldtype || MPI_DATATYPE_NULL == oldtype || NULL == newtype) { return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_TYPE, FUNC_NAME ); } else if (count < 0) { return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_COUNT, FUNC_NAME ); } else if (blocklength < 0) { return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG, FUNC_NAME ); } } return PMPI_Type_create_hvector(count, blocklength, stride, oldtype, newtype); } Predicted src: static int handler_handler_handler(int argc, char **argv, char **argv) { int ret; if (argc!= 2) return -1; if (argc!= 2) { ret = 1; goto end; } if (argc!= 2) { goto end; } if (argc!= 2) { goto end; } if (argc!= 2) { goto end; } if (argc!= 2) { goto end; } ret = 0; end: return ret; } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined newtScrollbarSet() PUSH R12 MOV ECX,EDX PUSH RBP MOV RBP,RDI PUSH RBX MOV R12,qword ptr [RDI + 0x40] MOV EBX,dword ptr [RDI] MOV EAX,dword ptr [R12 + 0xc] TEST EAX,EAX JZ LAB_00109170 SUB EBX,0x3 IMUL EBX,ESI TEST EDX,EDX JNZ LAB_001091b0 LAB_00109162: ADD EBX,0x1 LAB_00109165: CMP dword ptr [R12],EBX JNZ LAB_00109187 LAB_0010916b: POP RBX POP RBP POP R12 RET LAB_00109170: SUB EBX,0x1 IMUL EBX,ESI TEST EDX,EDX JZ LAB_00109165 MOV EAX,EBX CDQ IDIV ECX MOV EBX,EAX CMP dword ptr [R12],EBX JZ LAB_0010916b LAB_00109187: MOV RDI,RBP XOR ESI,ESI CALL sbDrawThumb ;undefined sbDrawThumb() MOV dword ptr [R12],EBX MOV RDI,RBP POP RBX MOV ESI,0x1 POP RBP POP R12 JMP sbDrawThumb ;undefined sbDrawThumb() ?? 66h f ?? 2Eh . ?? 0Fh ?? 1Fh ?? 84h ?? 00h ?? 00h ?? 00h ?? 00h ?? 00h LAB_001091b0: MOV EAX,EBX CDQ IDIV ECX MOV EBX,EAX JMP LAB_00109162 ?? 0Fh Actual src: void newtScrollbarSet(newtComponent co, int where, int total) { struct scrollbar * sb = co->data; int new; if (sb->arrows) new = (where * (co->height - 3)) / (total? total : 1) + 1; else new = (where * (co->height - 1)) / (total? total : 1); if (new!= sb->curr) { sbDrawThumb(co, 0); sb->curr = new; sbDrawThumb(co, 1); } } Predicted src: void SetDrawDrawDrawDrawDrawDrawDrawDraw(DrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDrawDra ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined mbim_sim_init() LEA RDI,[.data.rel.ro:driver] JMP ofono_sim_driver_register ;undefined ofono_sim_driver_register() ?? 0Fh Actual src: void mbim_sim_init(void) { ofono_sim_driver_register(&driver); } Predicted src: void init_driver_init(void) { ofono_driver_init(&driver); } ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined hints_grep() PUSH RBP LEA RDX,[.rodata:s_DNS_Hints_0013e54c] ;= "DNS Hints" MOV RBP,RDI MOV ESI,0x1 PUSH RBX SUB RSP,0x8 CALL .plt:luaL_checkudata ;undefined luaL_checkudata() MOV RDI,RBP MOV ESI,0x2 CALL .plt:lua_settop ;undefined lua_settop() MOV RDI,RBP MOV EDX,0x1 MOV ESI,0x10 CALL .plt:lua_newuserdatauv ;undefined lua_newuserdatauv() PXOR XMM0,XMM0 MOV RDI,RBP XOR ECX,ECX MOVUPS xmmword ptr [RAX],XMM0 LEA RDX,[.rodata:DAT_0013f731] ;= 2Eh . MOV ESI,0x2 MOV RBX,RAX CALL .plt:luaL_optlstring ;undefined luaL_optlstring() MOV RDI,RBP MOV EDX,0x3 LEA RSI,[hints_next] MOV qword ptr [RBX],RAX CALL .plt:lua_pushcclosure ;undefined lua_pushcclosure() ADD RSP,0x8 MOV EAX,0x1 POP RBX POP RBP RET ?? 0Fh Actual src: static int hints_grep(lua_State *L) { struct dns_hints_i *i; hints_check(L, 1); lua_settop(L, 2); i = memset(lua_newuserdata(L, sizeof *i), 0, sizeof *i); i->zone = luaL_optstring(L, 2, "."); lua_pushcclosure(L, &hints_next, 3); return 1; } Predicted src: static int lua_lua_next (lua_State *L) { lua_pushnumber(L, 1); lua_pushnumber(L, 1); lua_pushnumber(L, 1); lua_pushnumber(L, 1); return 1; }