============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined conf_setAudioDefaults() SUB RSP,0x8 MOV RDI,qword ptr [.bss:conf[88]] TEST RDI,RDI JZ LAB_0011bdd5 CALL .plt:::free ;void free(void * __ptr) LAB_0011bdd5: LEA RDI,[.rodata:s_openal_001f5946] ;= "openal" CALL .plt:::strdup ;char * strdup(char * __s) MOV dword ptr [.bss:conf[112]],0x0 MOV qword ptr [.bss:conf[88]],RAX MOV RAX,0x100000080 MOV qword ptr [.bss:conf[96]],RAX MOV RAX,0x8000000001 MOV qword ptr [.bss:conf[104]],RAX MOV RAX,qword ptr [.rodata:DAT_001f43c0] ;= 3FE3333333333333h MOV qword ptr [.bss:conf[120]],RAX MOV RAX,qword ptr [.rodata:DAT_001f49a0] ;= 3FE999999999999Ah MOV qword ptr [.bss:conf[128]],RAX ADD RSP,0x8 RET ?? 66h f Actual src: void conf_setAudioDefaults (void) { if (conf.sound_backend!= NULL) { free(conf.sound_backend); conf.sound_backend = NULL; } /* Sound. */ conf.sound_backend = strdup(BACKEND_DEFAULT); conf.snd_voices = VOICES_DEFAULT; conf.snd_pilotrel = PILOT_RELATIVE_DEFAULT; conf.al_efx = USE_EFX_DEFAULT; conf.al_bufsize = BUFFER_SIZE_DEFAULT; conf.nosound = MUTE_SOUND_DEFAULT; conf.sound = SOUND_VOLUME_DEFAULT; conf.music = MUSIC_VOLUME_DEFAULT; } Predicted src: void confconf_set_open(void) { if (conf.open) conf.open = strdup(conf.open); else conf.open = strdup(conf.open); } ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined xdp_screen_cast_set_available_cursor_modes() PUSH R12 MOV R12D,ESI MOV ESI,0x50 CALL .plt:::g_type_check_instance_cast ;undefined g_type_check_instance_cast() MOV EDX,R12D XOR ECX,ECX POP R12 MOV RDI,RAX LEA RSI,[.rodata:s_available-cursor-modes_001a1865] ;= "available-cursor-modes" XOR EAX,EAX JMP .plt:::g_object_set ;undefined g_object_set() ?? 66h f Actual src: void xdp_screen_cast_set_available_cursor_modes (XdpScreenCast *object, guint value) { g_object_set (G_OBJECT (object), "available-cursor-modes", value, NULL); } Predicted src: void gclue_screen_screen_set_screen_cursor (GclueScreenScreen *screen_screen, gboolean value) { g_object_set (G_OBJECT (screen_screen), "screen-cursor", value, NULL); } ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined CG_CreateBlend() ;local_3c undefined4 -3c PUSH R15 XOR EAX,EAX PUSH R14 PUSH R13 PUSH R12 PUSH RBP PUSH RBX SUB RSP,0x18 CALL .plt:getCaliValue ;undefined getCaliValue() MOV EBP,EAX XOR EAX,EAX CALL .plt:getCaliValue ;undefined getCaliValue() MOV R12D,EAX XOR EAX,EAX CALL .plt:getCaliValue ;undefined getCaliValue() MOV R13D,EAX XOR EAX,EAX CALL .plt:getCaliValue ;undefined getCaliValue() MOV R14D,EAX XOR EAX,EAX CALL .plt:getCaliValue ;undefined getCaliValue() MOV EBX,EAX XOR EAX,EAX CALL .plt:getCaliValue ;undefined getCaliValue() MOV R15D,EAX MOV RAX,qword ptr [->sys_nextdebuglv] ;= 0034e0c8 MOV dword ptr [RAX]=>EXTERNAL:sys_nextdebuglv,0x2 ;=?? XOR EAX,EAX CALL .plt:sl_getIndex ;undefined sl_getIndex() MOV dword ptr [RSP + local_3c+0x48],EAX XOR EAX,EAX CALL .plt:sl_getPage ;undefined sl_getPage() MOV EDX,dword ptr [RSP + local_3c+0x48] LEA RDI,[.rodata:s_%d,%x:_0011c03b] ;= "%d,%x: " MOV ESI,EAX XOR EAX,EAX CALL .plt:sys_message ;undefined sys_message() SUB RSP,0x8 MOV R9D,EBX MOV R8D,R14D PUSH R15 MOV ECX,R13D MOV EDX,R12D MOV ESI,EBP LEA RDI,[.rodata:s_SACT.CG_CreateBlend_%d,%d,%d,%d,_0011cae0] ;= "SACT.CG_CreateBlend %d,%d,%d,%d,%... XOR EAX,EAX CALL .plt:sys_message ;undefined sys_message() ADD RSP,0x28 MOV R9D,R15D MOV R8D,EBX MOV ECX,R14D POP RBX MOV EDX,R13D MOV ESI,R12D MOV EDI,EBP POP RBP POP R12 POP R13 POP R14 POP R15 JMP .plt:LAB_00107970 ?? 66h f Actual src: void CG_CreateBlend() { int wNumDstCG = getCaliValue(); int wNumBaseCG = getCaliValue(); int wX = getCaliValue(); int wY = getCaliValue(); int wNumBlendCG = getCaliValue(); int wAlphaMapMode = getCaliValue(); DEBUG_COMMAND_YET("SACT.CG_CreateBlend %d,%d,%d,%d,%d,%d:\n", wNumDstCG, wNumBaseCG, wX, wY, wNumBlendCG, wAlphaMapMode); scg_create_blend(wNumDstCG, wNumBaseCG, wX, wY, wNumBlendCG, wAlphaMapMode); } Predicted src: void f2D() { int p1 = getCaliValue(); int p2 = getCaliValue(); int p3 = getCaliValue(); int p4 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); int p5 = getCaliValue(); } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined op_d060_21_ff() PUSH R14 PUSH R13 PUSH R12 LEA R12,[.bss:regs] PUSH RBP MOV EBP,EDI AND EDI,0x7 LEA R14,[R12 + RDI*0x4 + 0x20] PUSH RBX SHR EBP,0x9 MOV dword ptr [.bss:OpcodeFamily],0xb MOV EAX,dword ptr [R14]=>.bss:regs[32] AND EBP,0x7 LEA R13D,[RAX + -0x2] MOV EDI,R13D CALL qword ptr [.bss:x_get_word] MOV dword ptr [R14],R13D=>.bss:regs[32] MOV EDI,0x2 MOV R13D,dword ptr [R12 + RBP*0x4]=>.bss:regs MOV EBX,EAX MOV EAX,dword ptr [.bss:regs[188]] MOV dword ptr [.bss:regs[184]],EAX CALL get_word_ce020_prefetch_opcode ;undefined get_word_ce020_prefetch_op... MOVZX EDX,R13W XOR ECX,ECX MOV word ptr [.bss:regs[104]],AX MOVZX EAX,BX ADD EDX,EAX MOV EAX,R13D ADD AX,BX MOV EAX,dword ptr [.bss:regflags] MOV word ptr [R12 + RBP*0x4]=>.bss:regs,DX SETC CL XOR ESI,ESI TEST DX,DX SETZ SIL XOR R13D,EDX XOR EBX,EDX AND EAX,0xffffbffe AND EBX,R13D SHL ESI,0xe AND ECX,0x1 ADD dword ptr [.bss:regs[64]],0x2 MOVSX EBX,BX OR EAX,ESI SHL ECX,0x8 SHR EBX,0x1f OR EAX,EBX POP RBX POP RBP AND AH,0xfe POP R12 POP R13 OR EAX,ECX POP R14 MOV ECX,EAX AND AH,0x7f SHR ECX,0x8 MOV dword ptr [.bss:regflags+4],ECX MOV ECX,EDX AND ECX,0x8000 OR EAX,ECX MOV dword ptr [.bss:regflags],EAX RET ?? 66h f Actual src: void REGPARAM2 op_d060_21_ff(uae_u32 opcode) { int count_cycles = 0; uae_u32 real_opcode = opcode; uae_u32 srcreg = (real_opcode & 7); uae_u32 dstreg = (real_opcode >> 9) & 7; OpcodeFamily = 11; /* ea H:2,T:2,C:0 fea */ uaecptr srca; srca = m68k_areg(regs, srcreg) - 2; uae_s16 src = x_get_word(srca); m68k_areg(regs, srcreg) = srca; uae_s16 dst = m68k_dreg(regs, dstreg); ipl_fetch(); regs.irc = get_word_ce020_prefetch_opcode(2); /* OP zero */ uae_u32 newv = ((uae_u16)(dst)) + ((uae_u16)(src)); int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG(((uae_s16)(newv)) == 0); SET_VFLG((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG(((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY(); SET_NFLG(flgn!= 0); m68k_dreg(regs, dstreg) = (m68k_dreg(regs, dstreg) & ~0xffff) | ((newv) & 0xffff); m68k_incpci(2); return; } Predicted src: void REGPARAM2 op_0c0_21_ff(uae_u32 opcode) { int count_cycles = 0; uae_u32 real_opcode = opcode; uae_u32 srcreg = (real_opcode & 7); uae_u32 dstreg = (real_opcode >> 9) & 7; OpcodeFamily = 30; /* ea H:2,T:0,C:0 fea */ uaecptr srca; srca = m68k_areg(regs, srcreg); uae_s32 src = x_get_long(srca); uae_s32 dst = m68k_dreg(regs, dstreg); ipl_fetch(); regs.irc = get_word_ce030_prefetch_opcode(2); /* OP zero */ uae_u32 newv = ((uae_u32)(dst)) - ((uae_u32)(src)); int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG(((uae_s32)(newv)) == 0); SET_VFLG((flgs!= flgo) && (flgn!= flgo)); SET_CFLG(((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG(flgn!= 0); m68k_incpci(2); return; } ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined gimp_curves_tool_key_press() PUSH R13 MOV R13,RDX PUSH R12 MOV R12,RSI PUSH RBP MOV RBP,RDI CALL gimp_curves_tool_get_type ;undefined gimp_curves_tool_get_type() MOV RDI,RBP MOV RSI,RAX CALL .plt:::g_type_check_instance_cast ;undefined g_type_check_instance_cast() CMP qword ptr [RBP + 0x58],0x0 JZ LAB_0024f7fd MOV RDI,qword ptr [RAX + 0x2c8] TEST RDI,RDI JZ LAB_0024f7fd MOV RSI,R12 CALL .plt:::gtk_widget_event ;undefined gtk_widget_event() TEST EAX,EAX JNZ LAB_0024f830 LAB_0024f7fd: CALL gimp_tool_get_type ;undefined gimp_tool_get_type() MOV RDI,qword ptr [.bss:gimp_curves_tool_parent_class] MOV RSI,RAX CALL .plt:::g_type_check_class_cast ;undefined g_type_check_class_cast() MOV RDX,R13 MOV RSI,R12 MOV RDI,RBP MOV RAX,qword ptr [RAX + 0xd8] POP RBP POP R12 POP R13 JMP RAX ?? 0Fh ;? -> 00841f0f ?? 1Fh ?? 84h ?? 00h ?? 00h ?? 00h ?? 00h ?? 00h LAB_0024f830: POP RBP MOV EAX,0x1 POP R12 POP R13 RET ?? 0Fh Actual src: static gboolean gimp_curves_tool_key_press (GimpTool *tool, GdkEventKey *kevent, GimpDisplay *display) { GimpCurvesTool *c_tool = GIMP_CURVES_TOOL (tool); if (tool->display && c_tool->graph) { if (gtk_widget_event (c_tool->graph, (GdkEvent *) kevent)) return TRUE; } return GIMP_TOOL_CLASS (parent_class)->key_press (tool, kevent, display); } Predicted src: static gboolean gimp_event_key_press (GtkWidget *widget, GdkEvent *event, gpointer user_data) { GimpWidget *event = GIMP_WIDGET (widget); if (event->priv->key_press) { if (event->priv->key_press) { gimp_event_key_press (event, event->priv->key_press); return TRUE; } } return FALSE; }