============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* CBufferObject::GetFd() * ;************************************************************************************************************************************************************ ;undefined GetFd(CBufferObject * this) ;this CBufferObje... RDI MOV EAX,dword ptr [this + 0x8] RET ?? 66h f Actual src: int CBufferObject::GetFd() { return m_fd; } Predicted src: CBuffer CBuffer::GetBuffer() { return m_buffer; } ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* KDL::Path_RoundedComposite::GetLengthToEndOfSegment(int) * ;************************************************************************************************************************************************************ ;undefined GetLengthToEndOfSegment(int param_1) ;param_1 int EDI MOV param_1,qword ptr [param_1 + 0x8] MOV RAX,qword ptr [param_1] JMP qword ptr [RAX + 0x60] ?? 66h f Actual src: double Path_RoundedComposite::GetLengthToEndOfSegment(int i) { return comp->GetLengthToEndOfSegment(i); } Predicted src: int GetPathLength(int id) override { return GetPathLength(id); } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* js::frontend::ElemOpEmitter::prepareForRhs() * ;************************************************************************************************************************************************************ ;undefined prepareForRhs(ElemOpEmitter * this) ;this ElemOpEmitt... RDI MOV EAX,dword ptr [this + 0x8] SUB EAX,0x8 CMP EAX,0x1 JA LAB_00687ad2 MOV EAX,dword ptr [this + 0xc] TEST EAX,EAX JZ LAB_00687ae0 LAB_00687ad2: MOV EAX,0x1 RET ?? 0Fh ;? -> 00841f0f ?? 1Fh ?? 84h ?? 00h ?? 00h ?? 00h ?? 00h ?? 00h LAB_00687ae0: MOV this,qword ptr [this] JMP js::frontend::BytecodeEmitter::emitSuperBase ;undefined emitSuperBase(BytecodeEmit... ?? 0Fh ;? -> 00841f0f Actual src: bool ElemOpEmitter::prepareForRhs() { MOZ_ASSERT(isSimpleAssignment() || isPropInit() || isCompoundAssignment()); MOZ_ASSERT_IF(isSimpleAssignment() || isPropInit(), state_ == State::Key); MOZ_ASSERT_IF(isCompoundAssignment(), state_ == State::Get); if (isSimpleAssignment() || isPropInit()) { // For CompoundAssignment, SuperBase is already emitted by emitGet. if (isSuper()) { if (!bce_->emitSuperBase()) { // [stack] THIS KEY SUPERBASE return false; } } } #ifdef DEBUG state_ = State::Rhs; #endif return true; } Predicted src: void KisBase::emit() { if (m_data.empty()) return; m_data.pop_back(); } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* simple_output::simple_comment(char const*) * ;************************************************************************************************************************************************************ ;undefined simple_comment(simple_output * this, char * param_1) ;this simple_outp... RDI ;param_1 char * RSI PUSH R12 MOV R12,this PUSH RBP MOV RBP,param_1 SUB RSP,0x8 CALL simple_output::flush_last_word ;undefined flush_last_word(simple_out... MOV EAX,dword ptr [R12 + 0xc] TEST EAX,EAX JNZ LAB_00118dd0 LAB_00118d7b: MOV RCX,qword ptr [R12] MOV EDX,0x5 MOV param_1,0x1 LEA this,[.rodata:s__0012b088] ;= " -->\n" CALL .plt:::fwrite ;size_t fwrite(void * __ptr, size_t _... MOV RAX,R12 MOV dword ptr [R12 + 0xc],0x0 ADD RSP,0x8 POP RBP POP R12 RET ?? 90h LAB_00118dd0: MOV param_1,qword ptr [R12] MOV this,0xa CALL .plt:::putc ;int putc(int __c, FILE * __stream) JMP LAB_00118d7b ;************************************************************************************************************************************************************ ;* simple_output::begin_comment(char const*) * ;************************************************************************************************************************************************************ ;undefined begin_comment(simple_output * this, char * param_1) ;this simple_outp... RDI ;param_1 char * RSI PUSH R13 Actual src: simple_output &simple_output::simple_comment(const char *s) { flush_last_word(); if (col!= 0) PUTC('\n', fp); FPUTS("\n", fp); col = 0; return *this; } Predicted src: int main (FILE *fp) { fprintf (fp, "\n"); fprintf (fp, "\n"); fprintf (fp, "\n"); return 0; } ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined NewChildCB() ;local_20 undefined8 -20 PUSH R13 LEA RCX,[.rodata:s_New_Child_%d_00104004] ;= "New Child %d" MOV EDX,0x1e PUSH R12 MOV R12,RDI PUSH RBP MOV RBP,RSI MOV ESI,0x1 SUB RSP,0x30 MOV R8D,dword ptr [.bss:count.2] MOV RAX,qword ptr FS:[0x28] MOV qword ptr [RSP + local_20+0x48],RAX XOR EAX,EAX MOV R13,RSP LEA EAX,[R8 + 0x1] MOV RDI,R13 MOV dword ptr [.bss:count.2],EAX XOR EAX,EAX CALL .plt:::__sprintf_chk ;undefined __sprintf_chk() XOR ECX,ECX MOV RDX,R13 MOV RSI,R12 MOV RDI,RBP CALL CreateNode ;undefined CreateNode() MOV RAX,qword ptr [RSP + local_20+0x48] SUB RAX,qword ptr FS:[0x28] JNZ LAB_00102a78 ADD RSP,0x30 POP RBP POP R12 POP R13 RET LAB_00102a78: CALL .plt:::__stack_chk_fail ;undefined __stack_chk_fail() NOP dword ptr [RAX] Actual src: static void NewChildCB(Widget w, XtPointer client, XtPointer call) { static int count = 0; char buffer[30]; sprintf (buffer, "New Child %d", count++); CreateNode((Widget)client, w, buffer, XmAlwaysOpen); } Predicted src: static char *NewNewNode(char *name, char *value) { char buf[MAX_STRING]; sprintf(buf, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d