============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined fn_handler() ;local_20 undefined8 -20 ;local_30 undefined8 -30 ;local_38 undefined8 -38 PUSH R12 PUSH RBP PUSH RBX MOVSXD RBX,EDI SUB RSP,0x20 MOV RAX,qword ptr FS:[0x28] MOV qword ptr [RSP + local_20+0x38],RAX XOR EAX,EAX LEA EAX,[RBX + -0x1] CMP EAX,0x3f JA LAB_0010680f CALL .plt:::__errno_location ;int * __errno_location(void) SHL RBX,0x4 MOV RDI,RSP MOV R12D,dword ptr [RAX] MOV RBP,RAX LEA RAX,[.data:signals] MOV RAX=>.data:signals,qword ptr [RAX + RBX*0x1] MOV qword ptr [RSP + local_30+0x38],0x0 MOV qword ptr [RSP]=>local_38,RAX CALL funcall ;undefined funcall() MOV dword ptr [RBP],R12D MOV RAX,qword ptr [RSP + local_20+0x38] SUB RAX,qword ptr FS:[0x28] JNZ LAB_0010681b ADD RSP,0x20 POP RBX POP RBP POP R12 RET LAB_0010680f: LEA RDI,[.rodata:s_unknown_signal_001133de] ;= "unknown signal" CALL panic ;undefined panic() LAB_0010681b: CALL .plt:::__stack_chk_fail ;undefined __stack_chk_fail() ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined rc_exit() ;local_10 undefined8 -10 ;local_20 undefined8 -20 ;local_28 undefined8 -28 SUB RSP,0x28 Actual src: static void fn_handler(int s) { char *sig[2]; int olderrno; if (s < 1 || s >= NUMOFSIGNALS) panic("unknown signal"); olderrno = errno; sig[0] = signals[s].name; sig[1] = NULL; funcall(sig); errno = olderrno; } Predicted src: static void sighandler(int sig) { int i; for (i = 0; i < sig; i++) { if (sig[i] == -1) { exit(1); } } } ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined speechd_new() PUSH R12 XOR ECX,ECX XOR EDX,EDX LEA RSI,[.rodata:DAT_00102000] ;= 6Dh m PUSH RBP PUSH RBX MOV RBX,RDI LEA RDI,[.rodata:s_navit_00102005] ;= "navit" CALL .plt:::spd_open ;undefined spd_open() TEST RAX,RAX JZ LAB_001011d0 MOV EDI,0x8 MOV RBP,RAX CALL .plt:g_malloc ;undefined g_malloc() MOV R12,RAX TEST RAX,RAX JZ LAB_001011c3 MOVDQA XMM0,xmmword ptr [.data.rel.ro:speechd_meth] MOV qword ptr [RAX],RBP MOV ESI,0x1 MOV RDI,RBP MOVUPS xmmword ptr [RBX],XMM0 CALL .plt:::spd_set_punctuation ;undefined spd_set_punctuation() LAB_001011c3: MOV RAX,R12 POP RBX POP RBP POP R12 RET ?? 0Fh ?? 1Fh ?? 44h D ?? 00h ?? 00h LAB_001011d0: XOR R12D,R12D POP RBX POP RBP MOV RAX,R12 POP R12 RET ?? 0Fh Actual src: static struct speech_priv *speechd_new(struct speech_methods *meth, struct attr **attrs, struct attr *attr) { struct speech_priv *this; SPDConnection *conn; conn = spd_open("navit","main",NULL,SPD_MODE_SINGLE); if (! conn) return NULL; this=g_new(struct speech_priv,1); if (this) { this->conn=conn; *meth=speechd_meth; spd_set_punctuation(conn, SPD_PUNCT_NONE); } return this; } Predicted src: char * open_open (const char *filename) { static char *filename = NULL; if (!filename) return NULL; filename = g_new0 (char, 1); if (!filename) return NULL; filename = g_new0 (char, 1); if (!filename) return NULL; return filename; } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined gp_arrow_button_constructed() PUSH RBP MOV RBP,RDI MOV RDI,qword ptr [.bss:gp_arrow_button_parent_class] ;=?? MOV ESI,0x50 CALL .plt:::g_type_check_class_cast ;undefined g_type_check_class_cast() MOV RDI,RBP CALL qword ptr [RAX + 0x48] CALL .plt:::gtk_widget_get_type ;undefined gtk_widget_get_type() MOV RDI,RBP MOV RSI,RAX CALL .plt:::g_type_check_instance_cast ;undefined g_type_check_instance_cast() MOV RDI,RAX CALL .plt:::gtk_widget_get_accessible ;undefined gtk_widget_get_accessible() LEA RSI,[.rodata:s_Hide_Panel_00138771] ;= "Hide Panel" XOR EDI,EDI MOV EDX,0x5 MOV RBP,RAX CALL .plt:::dcgettext ;undefined dcgettext() MOV RDI,RBP POP RBP MOV RSI,RAX JMP .plt:::atk_object_set_name ;undefined atk_object_set_name() ?? 66h f Actual src: static void gp_arrow_button_constructed (GObject *object) { GtkWidget *widget; AtkObject *atk; G_OBJECT_CLASS (gp_arrow_button_parent_class)->constructed (object); widget = GTK_WIDGET (object); atk = gtk_widget_get_accessible (widget); atk_object_set_name (atk, _("Hide Panel")); } Predicted src: static void gtk_button_set_name (GtkWidget *widget) { GtkWidget *widget; widget = GTK_WIDGET_CLASS (gtk_button_parent_class)->set_name (widget); GTK_WIDGET_CLASS (parent_class)->set_name (widget, widget); } ============================== 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: static void write_close(void *data) { close(data); } ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined PAINT_OT_vertex_paint() LEA RAX,[.rodata:s_Vertex_Paint_03a79e7d] ;= "Vertex Paint" MOV qword ptr [RDI],RAX=>.rodata:s_Vertex_Paint_03a79e7d ;= "Vertex Paint" LEA RAX,[.rodata:s_PAINT_OT_vertex_paint_03adedf7] ;= "PAINT_OT_vertex_paint" MOV qword ptr [RDI + 0x8],RAX=>.rodata:s_PAINT_OT_vertex_paint_03adedf7 ;= "PAINT_OT_vertex_paint" LEA RAX,[.rodata:s_Paint_a_stroke_in_the_active_ver_03bb3768] ;= "Paint a stroke in the active vert... MOV qword ptr [RDI + 0x18],RAX=>.rodata:s_Paint_a_stroke_in_the_active_ver_03bb3768 ;= "Paint a stroke in the active vert... LEA RAX,[vpaint_invoke] MOV qword ptr [RDI + 0x38],RAX=>vpaint_invoke LEA RAX,[paint_stroke_modal] MOV qword ptr [RDI + 0x48],RAX=>paint_stroke_modal LEA RAX,[vpaint_exec] MOV qword ptr [RDI + 0x28],RAX=>vpaint_exec LEA RAX,[vertex_paint_poll] MOV qword ptr [RDI + 0x50],RAX=>vertex_paint_poll LEA RAX,[vpaint_cancel] MOV qword ptr [RDI + 0x40],RAX=>vpaint_cancel MOV EAX,0x6 MOV word ptr [RDI + 0xd0],AX JMP paint_stroke_operator_properties ;undefined paint_stroke_operator_prop... ?? 0Fh ;? -> 00841f0f Actual src: void PAINT_OT_vertex_paint(wmOperatorType *ot) { /* identifiers */ ot->name = "Vertex Paint"; ot->idname = "PAINT_OT_vertex_paint"; ot->description = "Paint a stroke in the active vertex color layer"; /* api callbacks */ ot->invoke = vpaint_invoke; ot->modal = paint_stroke_modal; ot->exec = vpaint_exec; ot->poll = vertex_paint_poll; ot->cancel = vpaint_cancel; /* flags */ ot->flag = OPTYPE_UNDO | OPTYPE_BLOCKING; paint_stroke_operator_properties(ot); } Predicted src: void WM_OT_OT_active_exec(wmOperatorType *ot) { /* identifiers */ ot->name = "Select"; ot->description = "Select */ ot->description = "OBJECT_OT_active_exec"; /* api callbacks */ ot->exec = WM_operator_exec; ot->poll = WM_operator_poll; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* flags */ WM_operator_properties_exec(ot); }