============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined Perl_parse_arithexpr() PUSH RBP MOV RBP,RDI PUSH RBX SUB RSP,0x8 TEST ESI,0xfffffffe JNZ LAB_001a9ade MOV EBX,ESI MOV EDX,0xa MOV ESI,0x103 CALL S_parse_recdescent_for_op ;undefined S_parse_recdescent_for_op() TEST RAX,RAX JZ LAB_001a9a90 LAB_001a9a87: ADD RSP,0x8 POP RBX POP RBP RET ?? 66h f ?? 90h LAB_001a9a90: TEST EBX,EBX JNZ LAB_001a9a87 MOV RAX,qword ptr [RBP + 0x200] CMP byte ptr [RAX + 0xff],0x0 JZ LAB_001a9ac0 LAB_001a9aa4: ADD RSP,0x8 MOV RDI,RBP XOR EDX,EDX XOR ESI,ESI POP RBX POP RBP JMP .plt:Perl_newOP ;undefined Perl_newOP() ?? 66h f ?? 2Eh . ?? 0Fh ?? 1Fh ?? 84h ?? 00h ?? 00h ?? 00h ?? 00h ?? 00h LAB_001a9ac0: MOV RDI,RBP LEA RSI,[.rodata:s_Parse_error_002d58bc] ;= "Parse error" XOR EAX,EAX CALL .plt:Perl_mess ;undefined Perl_mess(undefined param_... MOV RDI,RBP MOV RSI,RAX CALL .plt:Perl_qerror ;undefined Perl_qerror() JMP LAB_001a9aa4 LAB_001a9ade: LEA RDX,[.rodata:s_parse_expr_002d6081] ;= "parse_expr" LEA RSI,[.rodata:s_Parsing_code_internal_error_(%s)_002d7450] ;= "Parsing code internal error (%s)" XOR EAX,EAX CALL .plt:Perl_croak ;undefined Perl_croak(undefined param... NOP dword ptr CS:[RAX + RAX*0x1] Actual src: OP * Perl_parse_arithexpr(pTHX_ U32 flags) { return parse_expr(LEX_FAKEEOF_COMPARE, flags); } Predicted src: void Perl_op_error(pTHX_ARGS) { PERL_ARGS_ASSERT_ARGS_ASSERT_ARGS(); PERL_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSERT_ARGS_ASSER ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined ImagePaint_missing_materials_get() MOV RAX,qword ptr [RDI + 0x10] MOVZX EAX,word ptr [RAX + 0x5a] SHR AX,1 AND EAX,0x1 RET ?? 90h Actual src: bool ImagePaint_missing_materials_get(PointerRNA *ptr) { ImagePaintSettings *data = (ImagePaintSettings *)(ptr->data); return (((data->missing_data) & 2)!= 0); } Predicted src: bool View3DGpencilModifier_invert_invert_get(PointerRNA *ptr) { View3D *data = (View3D *)(ptr->data); return (((data->flag) & 1)!= 0); } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined LineStyleAlphaModifier_DistanceFromObject_expanded_get() MOV RAX,qword ptr [RDI + 0x10] MOV EAX,dword ptr [RAX + 0x58] SHR EAX,1 AND EAX,0x1 RET ?? 0Fh Actual src: bool LineStyleAlphaModifier_DistanceFromObject_expanded_get(PointerRNA *ptr) { LineStyleAlphaModifier_DistanceFromObject *data = (LineStyleAlphaModifier_DistanceFromObject *)(ptr->data); return (((data->modifier.flags) & 2)!= 0); } Predicted src: bool LineStyleGeometryModifier_invert_invert_get(PointerRNA *ptr) { LineStyleGeometryModifier_invert *data = (LineStyleGeometryModifier_invert *)(ptr->data); return (((data->flag) & 1)!= 0); } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined ImagePaint_missing_materials_get() MOV RAX,qword ptr [RDI + 0x10] MOVZX EAX,word ptr [RAX + 0x5a] SHR AX,1 AND EAX,0x1 RET ?? 90h Actual src: bool ImagePaint_missing_materials_get(PointerRNA *ptr) { ImagePaintSettings *data = (ImagePaintSettings *)(ptr->data); return (((data->missing_data) & 2)!= 0); } Predicted src: bool BrushGpencilModifier_invert_get(PointerRNA *ptr) { Brush *data = (Brush *)(ptr->data); return (((data->flag) & 1)!= 0); } ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined _atspi_get_iface_num() PUSH R13 LEA RSI,[.rodata:s_org.a11y.atspi.Accessible_0012d911] ;= "org.a11y.atspi.Accessible" LEA R13,[.data.rel.ro:interfaces] PUSH R12 PUSH RBP MOV RBP,RDI PUSH RBX XOR EBX,EBX SUB RSP,0x8 JMP LAB_0011d46e ?? 90h LAB_0011d460: ADD RBX,0x1 MOV RSI=>.rodata:s_org.a11y.atspi.Action_0012dac5,qword ptr [R13 + RBX*0x8]=>.data.rel.ro:interfaces[8] ;= "org.a11y.atspi.Action" TEST RSI,RSI JZ LAB_0011d490 LAB_0011d46e: MOV RDI,RBP MOV R12D,EBX CALL .plt:::strcmp ;int strcmp(char * __s1, char * __s2) TEST EAX,EAX JNZ LAB_0011d460 ADD RSP,0x8 MOV EAX,R12D POP RBX POP RBP POP R12 POP R13 RET ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_0011d490: ADD RSP,0x8 MOV R12D,0xffffffff POP RBX MOV EAX,R12D POP RBP POP R12 POP R13 RET ?? 66h f Actual src: gint _atspi_get_iface_num (const char *iface) { /* TODO: Use a binary search or hash to improve performance */ int i; for (i = 0; interfaces[i]; i++) { if (!strcmp(iface, interfaces[i])) return i; } return -1; } Predicted src: int _get_iface_iface(const char *iface) { if (!iface) return -1; if (!iface) return -1; if (!strcmp(iface, iface)) return -1; return 0; }