============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined _cffi_f_ncplane_greyscale() ;local_20 undefined1 -20 ;local_30 undefined8 -30 ;local_38 undefined8 -38 ;local_40 undefined8 -40 PUSH RBP MOV RBP,RSP PUSH R13 PUSH R12 LEA R13=>local_40,[RBP + -0x38] MOV R12,RSI PUSH RBX MOV RDX,R13 SUB RSP,0x28 MOV RDI,qword ptr [.data:_cffi_types[200]] MOV RAX,qword ptr FS:[0x28] MOV qword ptr [RBP + local_30+0x8],RAX XOR EAX,EAX MOV qword ptr [RBP + local_38+0x8],0x0 CALL qword ptr [.bss:_cffi_exports[184]] TEST RAX,RAX JZ LAB_00142f48 MOV RCX,RAX XOR EAX,EAX CMP RCX,0x280 JBE LAB_00142f28 LAB_00142e96: LEA R8=>local_38,[RBP + -0x30] MOV RDX,R13 MOV RSI,R12 MOV qword ptr [RBP + local_40+0x8],RAX MOV RDI,qword ptr [.data:_cffi_types[200]] CALL _cffi_convert_array_argument ;undefined _cffi_convert_array_argume... TEST EAX,EAX JS LAB_00142f70 MOV RBX,qword ptr [RBP + local_38+0x8] CALL .plt:PyEval_SaveThread ;undefined PyEval_SaveThread() MOV R12,RAX CALL qword ptr [.bss:_cffi_exports[104]] MOV RDI,qword ptr [RBP + local_40+0x8] CALL .plt:ncplane_greyscale ;undefined ncplane_greyscale() CALL qword ptr [.bss:_cffi_exports[112]] MOV RDI,R12 CALL .plt:PyEval_RestoreThread ;undefined PyEval_RestoreThread() TEST RBX,RBX JZ LAB_00142f00 NOP word ptr CS:[RAX + RAX*0x1] LAB_00142ef0: MOV RDI,RBX MOV RBX,qword ptr [RBX] CALL .plt:PyObject_Free ;undefined PyObject_Free() TEST RBX,RBX JNZ LAB_00142ef0 LAB_00142f00: MOV RAX=>EXTERNAL:_Py_NoneStruct,qword ptr [->_Py_NoneStruct] ;= 001807f8 ;=?? ADD qword ptr [RAX]=>EXTERNAL:_Py_NoneStruct,0x1 ;=?? LAB_00142f0b: MOV RDX,qword ptr [RBP + local_30+0x8] SUB RDX,qword ptr FS:[0x28] JNZ LAB_00142f74 LEA RSP=>local_20,[RBP + -0x18] POP RBX POP R12 POP R13 POP RBP RET ?? 0Fh ?? 1Fh ?? 00h LAB_00142f28: LEA RAX,[RCX + 0x17] AND RAX,-0x10 SUB RSP,RAX LEA RAX,[RSP + 0xf] AND RAX,-0x10 JMP LAB_00142e96 ?? 0Fh ?? 1Fh ?? 80h ?? 00h ?? 00h ?? 00h ?? 00h LAB_00142f48: CALL .plt:PyEval_SaveThread ;undefined PyEval_SaveThread() MOV R12,RAX CALL qword ptr [.bss:_cffi_exports[104]] MOV RDI,qword ptr [RBP + local_40+0x8] CALL .plt:ncplane_greyscale ;undefined ncplane_greyscale() CALL qword ptr [.bss:_cffi_exports[112]] MOV RDI,R12 CALL .plt:PyEval_RestoreThread ;undefined PyEval_RestoreThread() JMP LAB_00142f00 ?? 90h LAB_00142f70: XOR EAX,EAX JMP LAB_00142f0b LAB_00142f74: CALL .plt:::__stack_chk_fail ;undefined __stack_chk_fail() NOP dword ptr [RAX] Actual src: static PyObject * _cffi_f_ncplane_greyscale(PyObject *self, PyObject *arg0) { struct ncplane * x0; Py_ssize_t datasize; struct _cffi_freeme_s *large_args_free = NULL; datasize = _cffi_prepare_pointer_call_argument( _cffi_type(25), arg0, (char **)&x0); if (datasize!= 0) { x0 = ((size_t)datasize) <= 640? (struct ncplane *)alloca((size_t)datasize) : NULL; if (_cffi_convert_array_argument(_cffi_type(25), arg0, (char **)&x0, datasize, &large_args_free) < 0) return NULL; } Py_BEGIN_ALLOW_THREADS _cffi_restore_errno(); { ncplane_greyscale(x0); } _cffi_save_errno(); Py_END_ALLOW_THREADS (void)self; /* unused */ if (large_args_free!= NULL) _cffi_free_array_arguments(large_args_free); Py_INCREF(Py_None); return Py_None; } Predicted src: static PyObject * _wrap_array_new(PyObject *self, PyObject *args, PyObject *args, PyObject *args) { PyObject *py_data; PyObject *py_data; if (!PyArg_ParseTuple(args, &args, &args, &args, &args)) return NULL; if (!PyArg_ParseTuple(args, (char *)args, (char *)args, (char *)args)) return NULL; if (!PyArg_fail(args, (char *)args, (char *)args, (char *)args)) return NULL; else return NULL; } ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined gf_props_get_id() TEST RDI,RDI JZ LAB_004f5b40 PUSH R12 MOV R12,RDI PUSH RBP LEA RBP,[.data:GF_BuiltInProps[8]] PUSH RBX XOR EBX,EBX JMP LAB_004f5b0f ?? 66h f ?? 0Fh ;? -> 00841f0f ?? 1Fh ?? 84h ?? 00h ?? 00h ?? 00h ?? 00h ?? 00h LAB_004f5b00: ADD EBX,0x1 ADD RBP,0x20 CMP EBX,0xba JZ LAB_004f5b43 LAB_004f5b0f: ; FWD[3,0]: 0073b88e,0088f4c8,0088f4e8 MOV RDI=>.rodata:s_ID_0073b887+7,qword ptr [RBP]=>.data:GF_BuiltInProps[8] ;= "ID" TEST RDI,RDI JZ LAB_004f5b00 MOV RSI,R12 CALL .plt:::strcmp ;int strcmp(char * __s1, char * __s2) TEST EAX,EAX JNZ LAB_004f5b00 SHL RBX,0x5 LEA RAX,[.data:GF_BuiltInProps] MOV EAX,dword ptr [RAX + RBX*0x1]=>.data:GF_BuiltInProps POP RBX POP RBP POP R12 RET ?? 66h f ?? 0Fh ;? -> 00841f0f ?? 1Fh ?? 84h ?? 00h ?? 00h ?? 00h ?? 00h ?? 00h LAB_004f5b40: XOR EAX,EAX RET LAB_004f5b43: POP RBX XOR EAX,EAX POP RBP POP R12 RET ?? 66h f Actual src: GF_EXPORT u32 gf_props_get_id(const char *name) { u32 i, nb_props; if (!name) return 0; nb_props = sizeof(GF_BuiltInProps) / sizeof(GF_BuiltInProperty); for (i=0; iUnit::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: const std::string& get_name() const { return m_name; } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined bio_close() PUSH RBP MOV RBP,RDI PUSH RBX SUB RSP,0x8 CMP byte ptr [RDI + 0x24],0x1 JZ LAB_0010c0e0 LAB_0010c0af: CMP byte ptr [RBP + 0x25],0x0 MOV EDI,dword ptr [RBP + 0x28] JNZ LAB_0010c0d8 CALL .plt:::close ;int close(int __fd) LAB_0010c0bd: MOV RDI,qword ptr [RBP] CALL .plt.got:::free ;void free(void * __ptr) ADD RSP,0x8 MOV RDI,RBP POP RBX POP RBP JMP .plt.got:::free ;void free(void * __ptr) ?? 0Fh ?? 1Fh ?? 40h @ ?? 00h LAB_0010c0d8: CALL tcpclose ;undefined tcpclose() JMP LAB_0010c0bd ?? 90h LAB_0010c0e0: CMP byte ptr [RDI + 0x26],0x0 JNZ LAB_0010c0af MOV EBX,dword ptr [RDI + 0xc] TEST EBX,EBX JZ LAB_0010c0af CMP byte ptr [RBP + 0x25],0x0 MOV EDI,dword ptr [RDI + 0x28] MOV RSI,qword ptr [RBP] JZ LAB_0010c120 MOV ECX,dword ptr [RBP + 0x14] MOV EDX,EBX CALL tcptowrite ;undefined tcptowrite() LAB_0010c104: CMP EBX,EAX JLE LAB_0010c110 MOV byte ptr [RBP + 0x26],0x1 TEST EAX,EAX JS LAB_0010c116 LAB_0010c110: CDQE ADD qword ptr [RBP + 0x18],RAX LAB_0010c116: MOV dword ptr [RBP + 0xc],0x0 JMP LAB_0010c0af ?? 90h LAB_0010c120: MOV EDX,EBX CALL .plt:::write ;ssize_t write(int __fd, void * __buf... JMP LAB_0010c104 ?? 0Fh Actual src: void bio_close(bio *b) { if (b->direction==BIO_WRITE) { bio_flush(b); } if (b->type==0) { close(b->fd); } else { tcpclose(b->fd); } free(b->buff); free(b); } Predicted src: void write_write_write(void *data) { int i; for (i = 0; i < 1; i++) { if (data[i]) { data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = 0; data[i] = ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* idAnimBlend::GetCycleCount() const * ;************************************************************************************************************************************************************ ;undefined GetCycleCount(idAnimBlend * this) ;this idAnimBlend * RDI MOVSX EAX,word ptr [this + 0x34] RET ?? 90h Actual src: int idAnimBlend::GetCycleCount( void ) const { return cycle; } Predicted src: int vtkGetMacro(int);