============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined hc_AES_decrypt_key() PUSH RBX MOV RBX,RDX MOV EDX,ESI MOV RSI,RDI MOV RDI,RBX CALL _hc_rijndaelKeySetupDec ;undefined _hc_rijndaelKeySetupDec() CMP EAX,0x1 MOV dword ptr [RBX + 0xf0],EAX POP RBX SBB EAX,EAX RET ?? 66h f Actual src: int AES_set_decrypt_key(const unsigned char *userkey, const int bits, AES_KEY *key) { key->rounds = rijndaelKeySetupDec(key->key, userkey, bits); if (key->rounds == 0) return -1; return 0; } Predicted src: static int _key_KeyKey(key_info_t key_info, key_info_t *key_info) { key_info_t *key_info = key_info->key_info; key_info_t *key_info = key_info->key_info; key_info_t *key_info = key_info->key_info; key_info_t *key_info = key_info->key_info; key_info_t *key_info = key_info->key_info; key_info->key_info = key_info->key_info; key_info->key_info = key_info->key_info; return 1; } ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined xdr_virNetMessageError() PUSH RBP MOV RBP,RDI PUSH RBX MOV RBX,RSI SUB RSP,0x8 CALL .plt.got:::xdr_int ;bool_t xdr_int(XDR * __xdrs, int * _... TEST EAX,EAX JNZ LAB_002d7370 LAB_002d7365: XOR EAX,EAX LAB_002d7367: ADD RSP,0x8 POP RBX POP RBP RET ?? 66h f ?? 90h LAB_002d7370: LEA RSI,[RBX + 0x4] MOV RDI,RBP CALL .plt.got:::xdr_int ;bool_t xdr_int(XDR * __xdrs, int * _... TEST EAX,EAX JZ LAB_002d7365 LEA RSI,[RBX + 0x8] MOV RDI,RBP CALL .plt:xdr_virNetMessageString ;undefined xdr_virNetMessageString() TEST EAX,EAX JZ LAB_002d7365 LEA RSI,[RBX + 0x10] MOV RDI,RBP CALL .plt.got:::xdr_int ;bool_t xdr_int(XDR * __xdrs, int * _... TEST EAX,EAX JZ LAB_002d7365 LEA RSI,[RBX + 0x18] MOV RDI,RBP CALL .plt:xdr_virNetMessageDomain ;undefined xdr_virNetMessageDomain() TEST EAX,EAX JZ LAB_002d7365 LEA RSI,[RBX + 0x20] MOV RDI,RBP CALL .plt:xdr_virNetMessageString ;undefined xdr_virNetMessageString() TEST EAX,EAX JZ LAB_002d7365 LEA RSI,[RBX + 0x28] MOV RDI,RBP CALL .plt:xdr_virNetMessageString ;undefined xdr_virNetMessageString() TEST EAX,EAX JZ LAB_002d7365 LEA RSI,[RBX + 0x30] MOV RDI,RBP CALL .plt:xdr_virNetMessageString ;undefined xdr_virNetMessageString() TEST EAX,EAX JZ LAB_002d7365 LEA RSI,[RBX + 0x38] MOV RDI,RBP CALL .plt.got:::xdr_int ;bool_t xdr_int(XDR * __xdrs, int * _... TEST EAX,EAX JZ LAB_002d7365 LEA RSI,[RBX + 0x3c] MOV RDI,RBP CALL .plt.got:::xdr_int ;bool_t xdr_int(XDR * __xdrs, int * _... TEST EAX,EAX JZ LAB_002d7365 LEA RSI,[RBX + 0x40] MOV RDI,RBP CALL .plt:xdr_virNetMessageNetwork ;undefined xdr_virNetMessageNetwork() TEST EAX,EAX SETNZ AL MOVZX EAX,AL JMP LAB_002d7367 ?? 66h f Actual src: bool_t xdr_virNetMessageError (XDR *xdrs, virNetMessageError *objp) { if (!xdr_int (xdrs, &objp->code)) return FALSE; if (!xdr_int (xdrs, &objp->domain)) return FALSE; if (!xdr_virNetMessageString (xdrs, &objp->message)) return FALSE; if (!xdr_int (xdrs, &objp->level)) return FALSE; if (!xdr_virNetMessageDomain (xdrs, &objp->dom)) return FALSE; if (!xdr_virNetMessageString (xdrs, &objp->str1)) return FALSE; if (!xdr_virNetMessageString (xdrs, &objp->str2)) return FALSE; if (!xdr_virNetMessageString (xdrs, &objp->str3)) return FALSE; if (!xdr_int (xdrs, &objp->int1)) return FALSE; if (!xdr_int (xdrs, &objp->int2)) return FALSE; if (!xdr_virNetMessageNetwork (xdrs, &objp->net)) return FALSE; return TRUE; } Predicted src: static bool_t xdr_u_int32(struct rte_eth_dev *dev, struct rte_u_int32_t *data) { struct rte_u_int32_t *data = dev->data; struct rte_u_int32_t *data = data->data; if (!data) { return false; } if (!xdr_u_int32_t(data, data)) { return false; } if (!xdr_u_int32_t(data, data)) { return false; } if (!xdr_u_int32_t(data, data)) { return false; } if (!xdr_u_int32_t(data, data)) { return false; } if (!xdr_u_int32_t(data, data)) { return false; } if (!xdr_u_int32_t(data, data)) { return false; } if (!xdr_u_int32_t(data, data)) { return false; } if (!xdr_u_int32_t(data, data)) { return false; } return true; } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined update_cb() PUSH RBP MOV RBP,RDI CALL .plt:sn_item_v0_get_type ;undefined sn_item_v0_get_type() MOV RDI,RBP MOV RSI,RAX CALL .plt:::g_type_check_instance_cast ;undefined g_type_check_instance_cast() MOV dword ptr [RAX + 0xcc],0x0 MOV RDI,RAX CALL update ;undefined update() XOR EAX,EAX POP RBP RET ?? 66h f Actual src: static gboolean update_cb (gpointer user_data) { SnItemV0 *v0; v0 = SN_ITEM_V0 (user_data); v0->update_id = 0; update (v0); return G_SOURCE_REMOVE; } Predicted src: static gboolean update_item_cb (gpointer user_data) { update_item (user_data); return FALSE; } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined gst_audio_channel_mixer_mix_float_planar_planar() MOVSXD RAX,ECX PUSH R14 PUSH R13 PUSH R12 PUSH RBP PUSH RBX MOV EBX,dword ptr [RDI] MOV R14D,dword ptr [RDI + 0x4] TEST EAX,EAX JLE LAB_00117f1a MOV RBP,RDI LEA R13,[RAX*0x4] MOV R9,RSI XOR EDI,EDI LEA EAX,[R14 + -0x1] MOV R11,RDX PXOR XMM2,XMM2 MOVSXD R10,EBX LEA R12,[0x4 + RAX*0x4] NOP LAB_00117ec0: XOR ESI,ESI TEST R14D,R14D JLE LAB_00117f11 NOP word ptr [RAX + RAX*0x1] LAB_00117ed0: MOVAPS XMM1,XMM2 TEST EBX,EBX JLE LAB_00117eff MOV R8,qword ptr [RBP + 0x8] XOR EAX,EAX MOVAPS XMM1,XMM2 LAB_00117ee0: MOV RCX,qword ptr [R8 + RAX*0x8] MOV RDX,qword ptr [R9 + RAX*0x8] ADD RAX,0x1 MOVSS XMM0,dword ptr [RCX + RSI*0x1] MULSS XMM0,dword ptr [RDX + RDI*0x1] ADDSS XMM1,XMM0 CMP R10,RAX JNZ LAB_00117ee0 LAB_00117eff: MOV RAX,qword ptr [R11 + RSI*0x2] ADD RSI,0x4 MOVSS dword ptr [RAX + RDI*0x1],XMM1 CMP R12,RSI JNZ LAB_00117ed0 LAB_00117f11: ADD RDI,0x4 CMP R13,RDI JNZ LAB_00117ec0 LAB_00117f1a: POP RBX POP RBP POP R12 POP R13 POP R14 RET ?? 66h f Actual src: DEFINE_FLOAT_MIX_FUNC (float, planar, planar); Predicted src: static void gst_audio_audio_audio_channel_audio_float (const GstAudioAudioBuffer * channel, const GstAudioBuffer * data, guint n) { guint i; guint n = 0; for (i = 0; i < n; i++) { for (i = 0; i < n; i++) gst_audio_channel_audio_channel_audio_float (channel, data[i]); } } ============================== Sample 5 ============================== 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 int CopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCopyCop