============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined RTSgBufCopyFromBuf() CMP RDI,0xfff JBE LAB_00182458 MOV RAX,-0x100000000000000 PUSH RBP MOV R8,RDI MOV RBP,RSP PUSH R15 PUSH R14 PUSH R13 PUSH R12 PUSH RBX MOV RBX,RDI SUB RSP,0x8 AND R8,RAX JNZ LAB_00182460 MOV R15,RSI CMP RSI,0xfff JBE LAB_00182432 TEST RSI,RAX JNZ LAB_00182432 MOV R13,RDX MOV R14,RDX TEST RDX,RDX JNZ LAB_001823f8 JMP LAB_0018242f ?? 0Fh ?? 1Fh ?? 00h LAB_001823c0: ADD EDX,0x1 MOV dword ptr [RBX + 0xc],EDX CMP ECX,EDX JBE LAB_001823e0 SHL RDX,0x4 ADD RDX,qword ptr [RBX] MOV RAX,qword ptr [RDX] MOV qword ptr [RBX + 0x10],RAX MOV RAX,qword ptr [RDX + 0x8] MOV qword ptr [RBX + 0x18],RAX LAB_001823e0: TEST R12,R12 JZ LAB_00182450 MOV RSI,R15 MOV RDX,R12 ADD R15,R12 CALL .plt:::memcpy ;void * memcpy(void * __dest, void *... SUB R14,R12 JZ LAB_0018242f LAB_001823f8: MOV EDX,dword ptr [RBX + 0xc] MOV ECX,dword ptr [RBX + 0x8] MOV RAX,qword ptr [RBX + 0x18] CMP EDX,ECX JZ LAB_00182448 LAB_00182406: CMP R14,RAX MOV R12,RAX MOV RDI,qword ptr [RBX + 0x10] CMOVBE R12,R14 SUB RAX,R12 MOV qword ptr [RBX + 0x18],RAX JZ LAB_001823c0 ADD R12,RDI MOV RDX,R14 MOV RSI,R15 MOV qword ptr [RBX + 0x10],R12 CALL .plt:::memcpy ;void * memcpy(void * __dest, void *... LAB_0018242f: MOV R8,R13 LAB_00182432: ADD RSP,0x8 MOV RAX,R8 POP RBX POP R12 POP R13 POP R14 POP R15 POP RBP RET ?? 0Fh ?? 1Fh ?? 40h @ ?? 00h LAB_00182448: TEST RAX,RAX JNZ LAB_00182406 NOP dword ptr [RAX] LAB_00182450: SUB R13,R14 JMP LAB_0018242f ?? 0Fh ?? 1Fh ?? 00h LAB_00182458: XOR EAX,EAX RET ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_00182460: XOR R8D,R8D JMP LAB_00182432 ?? 66h f Actual src: RTDECL(size_t) RTSgBufCopyFromBuf(PRTSGBUF pSgBuf, const void *pvBuf, size_t cbCopy) { AssertPtrReturn(pSgBuf, 0); AssertPtrReturn(pvBuf, 0); size_t cbLeft = cbCopy; while (cbLeft) { size_t cbThisCopy = cbLeft; void *pvDst = rtSgBufGet(pSgBuf, &cbThisCopy); if (!cbThisCopy) break; memcpy(pvDst, pvBuf, cbThisCopy); cbLeft -= cbThisCopy; pvBuf = (const void *)((uintptr_t)pvBuf + cbThisCopy); } return cbCopy - cbLeft; } Predicted src: static size_t CopyCopyCopyCopy(void *buf, size_t size, void *buf, size_t size) { size_t size = 0; size_t size = 0; if (buf == NULL) { return -1; } if (buf == NULL) { return -1; } size = buf + size; if (buf == NULL) { return -1; } size = buf + size; if (size == 0) { size = buf + size; } if (size == 0) { size = buf + size; } else { size = buf + size; } if (size == 0) { size = buf + size; } if (size == 0) { size = buf + size; } else { size = buf + size; } if (size == 0) { size = buf + size; } return size; } ============================== 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_cbs_get_contact (LinphoneContact *cbs) { returncbs->contact; } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined norm0() MOVSD XMM0,qword ptr [.rodata:DAT_00102008] DIVSD XMM0,qword ptr [RDI] MOVSD qword ptr [RSI],XMM0 TEST EDX,EDX JLE LAB_001013a6 MOVSXD RDX,EDX JMP LAB_00101394 ?? 0Fh ?? 1Fh ?? 80h ?? 00h ?? 00h ?? 00h ?? 00h LAB_00101390: MOVSD XMM0,qword ptr [RSI] LAB_00101394: MULSD XMM0,qword ptr [RDI + RDX*0x8] MOVSD qword ptr [RSI + RDX*0x8],XMM0 SUB RDX,0x1 TEST EDX,EDX JG LAB_00101390 LAB_001013a6: RET ?? 66h f Actual src: void norm0(double *x, double *y, int m) { y[0] = 1 / x[0]; for (; m >= 1; m--) y[m] = x[m] * y[0]; return; } Predicted src: void f(double *x, double *y, int n) { int i; for (i = 0; i < n; i++) x[i] = x[i]; } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* Pattern::canBeEmpty(States const&) const * ;************************************************************************************************************************************************************ ;undefined canBeEmpty(Pattern * this, States * param_1) ;this Pattern * RDI ;param_1 States * RSI MOV RAX,this MOV this,param_1 CMP qword ptr [RAX + 0x20],0x0 JZ LAB_0013fdb0 MOV param_1,qword ptr [RAX + 0x10] JMP Pattern::empty ;undefined empty(States * param_1, ul... ?? 66h f ?? 2Eh . ?? 0Fh ?? 1Fh ?? 84h ?? 00h ?? 00h ?? 00h ?? 00h ?? 00h LAB_0013fdb0: MOV EAX,0x1 RET ?? 66h f Actual src: bool Pattern::canBeEmpty(States const &states) const { return (fixedLength() && length() == 0) or empty(states, d_pair.first); } Predicted src: bool cancan::cancan(const Es::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::can::cancan::can::can::can::cancan::can::can::can::cancan::can::can::can::can::cancan::can::can::can::cancan::can::can::can::cancan::can::can::can::cancan::can::cancan::can::can::cancan::can::cancan::can::cancan::can::cancan::can::cancan::can::cancan::can::cancan::cancan::can::cancan::can::cancan::cancan::cancan::can::cancan::cancan::cancan::cancan::can::cancan::cancan::cancan::cancan::cancan::cancan::cancan::cancan::cancancan::cancan::cancan::cancan::cancan::cancan::cancan::cancan::cancan::cancancan::cancan::cancancan::cancan::cancancan::cancancan::cancancan::cancancan::cancancan::cancancancan::cancancan::cancancancan::cancancancan::cancancancancan::cancancancan::cancancancancan::cancancancancancancancancancan::cancancancancancancancan::cancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancancanca ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined lex_get_error(undefined param_1, undefined param_2, undefined param_3, undefined param_4, undefined param_5, undefined param_6, undefined1 param_7) ;param_1 undefined DIL ;param_2 undefined SIL ;param_3 undefined DL ;param_4 undefined CL ;param_5 undefined R8B ;param_6 undefined R9B ;param_7 undefined1 8 ;local_18 undefined1[16] -18 ;local_28 undefined1[16] -28 ;local_38 undefined1[16] -38 ;local_48 undefined1[16] -48 ;local_58 undefined1[16] -58 ;local_68 undefined1[16] -68 ;local_78 undefined1[16] -78 ;local_88 undefined1[16] -88 ;local_90 undefined8 -90 ;local_98 undefined8 -98 ;local_a0 undefined8 -a0 ;local_a8 undefined8 -a8 ;local_b8 undefined1 -b8 ;local_c0 undefined8 -c0 ;local_c8 undefined8 -c8 ;local_d0 undefined8 -d0 ;local_d4 undefined4 -d4 ;local_d8 undefined4 -d8 PUSH RBP MOV R10,param_2 MOV RBP,param_1 SUB RSP,0xd0 MOV qword ptr [RSP + local_a8+0xd8],param_3 MOV qword ptr [RSP + local_a0+0xd8],param_4 MOV qword ptr [RSP + local_98+0xd8],param_5 MOV qword ptr [RSP + local_90+0xd8],param_6 TEST AL,AL JZ LAB_0014aefd MOVAPS xmmword ptr [RSP + local_88[0]+0xd8],XMM0 MOVAPS xmmword ptr [RSP + local_78[0]+0xd8],XMM1 MOVAPS xmmword ptr [RSP + local_68[0]+0xd8],XMM2 MOVAPS xmmword ptr [RSP + local_58[0]+0xd8],XMM3 MOVAPS xmmword ptr [RSP + local_48[0]+0xd8],XMM4 MOVAPS xmmword ptr [RSP + local_38[0]+0xd8],XMM5 MOVAPS xmmword ptr [RSP + local_28[0]+0xd8],XMM6 MOVAPS xmmword ptr [RSP + local_18[0]+0xd8],XMM7 LAB_0014aefd: MOV RAX,qword ptr FS:[0x28] MOV qword ptr [RSP + local_c0+0xd8],RAX XOR EAX,EAX LEA RAX=>param_7,[RSP + 0xe0] MOV param_1,RBP MOV param_5,RSP MOV qword ptr [RSP + local_d0+0xd8],RAX LEA RAX=>local_b8,[RSP + 0x20] MOV param_4,R10 MOV qword ptr [RSP + local_c8+0xd8],RAX MOV RAX,qword ptr [RBP + 0x68] SUB RAX,qword ptr [RBP + 0x70] MOV dword ptr [RSP]=>local_d8,0x10 LEA param_2,[RAX + -0x1] MOV dword ptr [RSP + local_d4+0xd8],0x30 MOV param_3,param_2 CALL lex_source_error_valist ;undefined lex_source_error_valist() MOV param_1,RBP CALL lex_source_pop_front ;undefined lex_source_pop_front() MOV RAX,qword ptr [RSP + local_c0+0xd8] SUB RAX,qword ptr FS:[0x28] JNZ LAB_0014af6f ADD RSP,0xd0 POP RBP RET LAB_0014af6f: CALL .plt:::__stack_chk_fail ;undefined __stack_chk_fail() NOP dword ptr CS:[RAX + RAX*0x1] Actual src: static void PRINTF_FORMAT (2, 3) lex_get_error (struct lex_source *src, const char *format,...) { va_list args; int n; va_start (args, format); n = deque_count (&src->deque) - 1; lex_source_error_valist (src, n, n, format, args); lex_source_pop_front (src); va_end (args); } Predicted src: void source_pop_source_error (source_t *source, const char *format,...) { va_list args; va_start (args, format); _source_pop_source_pop_source (source, format, args); va_end (args); }