============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined fn_handler() ;local_20 undefined8 -20 ;local_30 undefined8 -30 ;local_38 undefined8 -38 PUSH R12 PUSH RBP PUSH RBX MOVSXD RBX,EDI SUB RSP,0x20 MOV RAX,qword ptr FS:[0x28] MOV qword ptr [RSP + local_20+0x38],RAX XOR EAX,EAX LEA EAX,[RBX + -0x1] CMP EAX,0x3f JA LAB_0010680f CALL .plt:::__errno_location ;int * __errno_location(void) SHL RBX,0x4 MOV RDI,RSP MOV R12D,dword ptr [RAX] MOV RBP,RAX LEA RAX,[.data:signals] MOV RAX=>.data:signals,qword ptr [RAX + RBX*0x1] MOV qword ptr [RSP + local_30+0x38],0x0 MOV qword ptr [RSP]=>local_38,RAX CALL funcall ;undefined funcall() MOV dword ptr [RBP],R12D MOV RAX,qword ptr [RSP + local_20+0x38] SUB RAX,qword ptr FS:[0x28] JNZ LAB_0010681b ADD RSP,0x20 POP RBX POP RBP POP R12 RET LAB_0010680f: LEA RDI,[.rodata:s_unknown_signal_001133de] ;= "unknown signal" CALL panic ;undefined panic() LAB_0010681b: CALL .plt:::__stack_chk_fail ;undefined __stack_chk_fail() ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined rc_exit() ;local_10 undefined8 -10 ;local_20 undefined8 -20 ;local_28 undefined8 -28 SUB RSP,0x28 Actual src: static void fn_handler(int s) { char *sig[2]; int olderrno; if (s < 1 || s >= NUMOFSIGNALS) panic("unknown signal"); olderrno = errno; sig[0] = signals[s].name; sig[1] = NULL; funcall(sig); errno = olderrno; } Predicted src: static void handler(int sig) { int i; for (i = 0; i < sig; i++) { if (sig[i] == 0) { exit(1); } } } ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined linphone_contact_search_get_predicate() MOV RAX,qword ptr [RDI + 0x40] RET ?? 66h f Actual src: const char*linphone_contact_search_get_predicate(LinphoneContactSearch* obj) { return obj->predicate; } Predicted src: LinphoneContact * linphone_search_get_contact(const LinphoneContact *search) { returnsearch->contact; } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined TSUserArgGet() PUSH RBX MOV EBX,ESI TEST RDI,RDI JZ LAB_00216ab0 MOV RCX,-0x2 LEA RDX,[.data.rel.ro:PluginUserArgsMixin::typeinfo] ;= 007686b0 LEA RSI,[.data.rel.ro:Continuation::typeinfo] ;= 00768430 CALL .plt:::__dynamic_cast ;undefined __dynamic_cast() MOV RDI,RAX TEST RAX,RAX JZ LAB_00216ae6 MOV RAX,qword ptr [RAX] MOVSXD RSI,EBX POP RBX MOV RAX,qword ptr [RAX + 0x10] JMP RAX ?? 66h f ?? 0Fh ?? 1Fh ?? 84h ?? 00h ?? 00h ?? 00h ?? 00h ?? 00h LAB_00216ab0: MOVSXD RSI,ESI CMP RSI,0x7f JBE LAB_00216ad8 MOV EDX,0x38 LEA RSI,[.rodata:s_../include/tscore/PluginUserArgs_005153a0+16] ;= "../include/tscore/PluginUserArgs.h" LEA RDI,[.rodata:s_ix_<_user_args.size()_005153d3] ;= "ix < user_args.size()" CALL .plt:::_ink_assert ;undefined _ink_assert() NOP dword ptr [RAX] LAB_00216ad8: LEA RAX,[.bss:global_user_args] POP RBX MOV RAX,qword ptr [RAX + RSI*offset.bss:global_user_args[8] &0xff + 0x8] RET LAB_00216ae6: MOV EDX,0x190e LEA RSI,[.rodata:s_traffic_server/InkAPI.cc_005153e9] ;= "traffic_server/InkAPI.cc" LEA RDI,[.rodata:s_user_args_005154ef] ;= "user_args" CALL .plt:::_ink_assert ;undefined _ink_assert() NOP Actual src: void * TSUserArgGet(void *data, int arg_idx) { if (nullptr!= data) { PluginUserArgsMixin *user_args = dynamic_cast(static_cast(data)); sdk_assert(user_args); return user_args->get_user_arg(arg_idx); } else { return global_user_args.get_user_arg(arg_idx); } } Predicted src: const char * useruserGet(useruser_t *user, int flags) { assert(user!= NULL); assert(user->user_user!= NULL); return user->user_user; } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* Load::getUnit() const * ;************************************************************************************************************************************************************ ;undefined getUnit(void) ;local_20 undefined8 -20 ;local_28 undefined8 -28 PUSH R13 PUSH R12 MOV R12,RDI ADD RDI,0x18 PUSH RBP SUB RSP,0x10 MOV R13,qword ptr [RSI + 0x88] MOV RAX,qword ptr FS:[0x28] MOV qword ptr [RSP + local_20+0x28],RAX MOV RAX,qword ptr [->Unit::vtable] ;= 00288da8 ADD RAX,0x10 MOV qword ptr [RDI + -0x18],RAX=>.data.rel.ro:PTR_~Unit_00288db8 ;= 00203f20 MOV qword ptr [R12 + 0x8],RDI MOV RBP,qword ptr [RSI + 0x80] MOV RAX,RBP ADD RAX,R13 JZ LAB_00207791 TEST RBP,RBP JZ LAB_00207816 LAB_00207791: MOV qword ptr [RSP]=>local_28,R13 CMP R13,0xf JA LAB_002077e0 CMP R13,0x1 JNZ LAB_002077d8 MOVZX EAX,byte ptr [RBP] MOV byte ptr [R12 + 0x18],AL LAB_002077aa: MOV qword ptr [R12 + 0x10],R13 MOV byte ptr [RDI + R13*0x1],0x0 MOV RAX,qword ptr [RSP + local_20+0x28] SUB RAX,qword ptr FS:[0x28] JNZ LAB_00207822 ADD RSP,0x10 MOV RAX,R12 POP RBP POP R12 POP R13 RET ?? 0Fh ?? 1Fh ?? 80h ?? 00h ?? 00h ?? 00h ?? 00h LAB_002077d8: TEST R13,R13 JZ LAB_002077aa JMP LAB_00207800 ?? 90h LAB_002077e0: LEA RDI,[R12 + 0x8] MOV RSI,RSP XOR EDX,EDX CALL .plt:::std::__cxx11::basic_string,std::allocator>::_M...;undefined _M_create(ulong * param_1,... MOV qword ptr [R12 + 0x8],RAX MOV RDI,RAX MOV RAX,qword ptr [RSP]=>local_28 MOV qword ptr [R12 + 0x18],RAX LAB_00207800: MOV RDX,R13 MOV RSI,RBP CALL .plt:::memcpy ;void * memcpy(void * __dest, void *... MOV R13,qword ptr [RSP]=>local_28 MOV RDI,qword ptr [R12 + 0x8] JMP LAB_002077aa LAB_00207816: LEA RDI,[.rodata:s_basic_string::_M_construct_null_n_0021e1b8] ;= "basic_string::_M_construct null n... CALL .plt:::std::__throw_logic_error ;undefined __throw_logic_error(char *... LAB_00207822: CALL .plt:::__stack_chk_fail ;undefined __stack_chk_fail() NOP Actual src: Unit Load::getUnit() const { return unit; } Predicted src: std::string TUnitUnitUnitUnitUnit::getUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUnitUni ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined AcpiDbGenerateSci() JMP AcpiEvSciDispatch ?? 66h f Actual src: void AcpiDbGenerateSci ( void) { AcpiEvSciDispatch (); } Predicted src: static void ReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReR