============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined LoadIntoExtraScreen() MOV EDX,0x1 XOR ESI,ESI JMP TFB_DrawScreen_Copy ;undefined TFB_DrawScreen_Copy() ?? 0Fh Actual src: void LoadIntoExtraScreen (PRECT r) { TFB_DrawScreen_Copy(r, TFB_SCREEN_MAIN, TFB_SCREEN_EXTRA); } Predicted src: static void __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)), __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unusedunused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __ __attribute__((unusedunused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __attribute__((unused)) __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _ ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined ioe_err_free() PUSH RBX MOV RBX,RDI MOV RDI,qword ptr [RDI] CALL .plt:free ;void free(void * __ptr) MOV RDI,qword ptr [RBX + 0x10] POP RBX JMP .plt:free ;void free(void * __ptr) ?? 66h f Actual src: void ioe_err_free(ioe_err_t *err) { free(err->path); free(err->msg); } Predicted src: static void free_free(void *ptr) { free(ptr); free(ptr); } ============================== Sample 3 ============================== 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_PyNs3__array_array(PyObject *self, PyObject *args, PyObject *kwargs) { PyObject *py_retval; const char *arg1; const char *arg2; const char *arg2; const char *arg2; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3; const char *arg3 = (char *) arg3; const char *arg3; const char *arg3; const char *arg3 = (char *) arg3; const char *arg3; const char *arg3 = (char *) arg3; const char *arg3 = (char *) arg3; arg3 = (char *) arg3; arg3 = (char *)arg3; arg3 = (char *) arg3; arg3 = (char *)arg3; arg3 = (char *)arg3; arg3 = (char *)arg3 = (char *)arg3; arg3 = (char *)arg3; arg3 = (char *)arg3; arg3 = (char *)arg3 = (char *)arg3; arg3 = (char *)arg3; arg3 = (char *)arg3 = (char *)arg3; if (!arg3) { arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3; } if (!arg3) { arg3 = arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3; arg3 = arg3 = arg3; arg3 = arg3 = arg3 = arg3 = arg3; arg ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined check_build() PUSH R12 MOV R12,RSI PUSH RBP MOV RBP,RDI MOV RDI,RSI PUSH RBX CALL .plt:::strlen ;size_t strlen(char * __s) MOV RDI,RBP MOV RBX,RAX CALL .plt:::lax_json_eof ;undefined lax_json_eof() TEST EAX,EAX JNZ LAB_0010136e CMP dword ptr [.bss:out_buf_index],EBX JNZ LAB_001013c6 MOVSXD RDX,EBX LEA RBX,[.bss:out_buf] MOV RDI,R12 MOV RSI=>.bss:out_buf,RBX CALL .plt:::memcmp ;int memcmp(void * __s1, void * __s2,... TEST EAX,EAX JNZ LAB_0010139c POP RBX MOV RDI,RBP POP RBP POP R12 JMP .plt:LAB_00101070 LAB_0010136e: MOV EDI,EAX CALL .plt:::lax_json_str_err ;undefined lax_json_str_err() MOV RDI,qword ptr [.bss:stderr] MOV ESI,0x1 LEA RDX,[.rodata:s_%s_00103020+22] ;= "%s\n" MOV RCX,RAX XOR EAX,EAX CALL .plt:::__fprintf_chk ;undefined __fprintf_chk() MOV EDI,0x1 CALL .plt:::exit ;void exit(int __status) LAB_0010139c: MOV R8=>.bss:out_buf,RBX MOV RCX,R12 LEA RDX,[.rodata:s_EXPECTED:_---------_%s_RECEIVED:_00103288] ;= "EXPECTED:\n---------\n%s\nRECEIVE... LAB_001013a9: MOV RDI,qword ptr [.bss:stderr] MOV ESI,0x1 XOR EAX,EAX CALL .plt:::__fprintf_chk ;undefined __fprintf_chk() MOV EDI,0x1 CALL .plt:::exit ;void exit(int __status) LAB_001013c6: LEA R8,[.bss:out_buf] MOV RCX,R12 LEA RDX,[.rodata:s__EXPECTED:_---------_%s_RECEIVED_00103258] ;= "\nEXPECTED:\n---------\n%s\nRECEI... JMP LAB_001013a9 ?? 0Fh Actual src: static void check_build(struct LaxJsonContext *context, const char *output) { int expected_len = strlen(output); enum LaxJsonError err = lax_json_eof(context); if (err!= LaxJsonErrorNone) { fprintf(stderr, "%s\n", lax_json_str_err(err)); exit(1); } if (out_buf_index!= expected_len) { fprintf(stderr, "\n" "EXPECTED:\n" "---------\n" "%s\n" "RECEIVED:\n" "---------\n" "%s\n", output, out_buf); exit(1); } if (memcmp(output, out_buf, expected_len)!= 0) { fprintf(stderr, "EXPECTED:\n" "---------\n" "%s\n" "RECEIVED:\n" "---------\n" "%s\n", output, out_buf); exit(1); } lax_json_destroy(context); } Predicted src: static void _status(const char *str, const char *str) { if (str) { fprintf(stderr, "%s: %s\n", str); fprintf(stderr, "%s: %s\n", str); fprintf(stderr, "%s\n", str); fprintf(stderr, "%s\n", str); } exit(1); } ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined CompositorNodeBlur_use_bokeh_get() MOV RAX,qword ptr [RDI + 0x10] MOV RAX,qword ptr [RAX + 0xf0] MOVZX EAX,byte ptr [RAX + 0x1e] AND EAX,0x1 RET ?? 66h f Actual src: bool CompositorNodeBlur_use_bokeh_get(PointerRNA *ptr) { NodeBlurData *data = (NodeBlurData *)(((bNode *)ptr->data)->storage); return (((data->bokeh) & 1)!= 0); } Predicted src: bool is_use_use_use_use_use(PointerRNA *ptr) { Brush *data = (Node *)(ptr->data); return (((data->flag) & 1)!= 0); }