bool find_parse_ip(ea_t ea, bool parsecode) { char id[16]; // Attempt to identify program start from ip get_many_bytes(ea, id, 16); if (memcmp(id, "SEGA SEGASATURN ", 16) != 0) return false; make_ascii_string(ea, 16, ASCSTR_C); make_ascii_string(ea+0x10, 16, ASCSTR_C); make_ascii_string(ea+0x20, 10, ASCSTR_C); make_ascii_string(ea+0x2A, 6, ASCSTR_C); make_ascii_string(ea+0x30, 8, ASCSTR_C); make_ascii_string(ea+0x38, 8, ASCSTR_C); make_ascii_string(ea+0x40, 10, ASCSTR_C); make_ascii_string(ea+0x4A, 6, ASCSTR_C); make_ascii_string(ea+0x50, 16, ASCSTR_C); make_ascii_string(ea+0x60, 0x70, ASCSTR_C); doByte(ea+0xD0, 16); doDwrd(ea+0xE0, 4); doDwrd(ea+0xE4, 4); doDwrd(ea+0xE8, 4); doDwrd(ea+0xEC, 4); doDwrd(ea+0xF0, 4); add_func(get_long(ea+0xF0), BADADDR); doDwrd(ea+0xF4, 4); doDwrd(ea+0xF8, 4); doDwrd(ea+0xFC, 4); if (parsecode) add_func(ea+0x100, BADADDR); return true; }
//----------------------------------------------------------------------------- // Function: run // // run is a plugin_t function. It is executed when the plugin is run. // // The argument 'arg' can be passed by adding an entry in // plugins.cfg or passed manually via IDC: // // success RunPlugin(string name, long arg); //----------------------------------------------------------------------------- void runPlugin(int arg) { ea_t ea = get_screen_ea(); int WcharCount = 0; //inf.strtype = ASCSTR_UNICODE; msg("\nCurrent addr is 0x%x and the byte are :\n",ea); while (1) { msg("%.2x ", get_byte(ea)); WcharCount ++; if (get_byte(ea) ==0 && get_byte(ea+1) == 0) //Detect the end of the unicode string { msg("\nWhole length is :0x%X.",WcharCount+2); break; } ea ++; } if (!make_ascii_string(get_screen_ea(),0/*WcharCount + 2*/,ASCSTR_UNICODE)) //+2 to fix up the last two 0. { msg("\nError:Convert to string failed.\n"); }else{ msg("\Convert to string success.\n"); } }
void make_RTStruct(ea_t adr, size_t namelen) { /* form struct */ do_unknown_range(adr, RT_len, true); doDwrd(adr,4); doDwrd(adr+4,4); doDwrd(adr+8,4); doDwrd(adr+12,4); doDwrd(adr+16,4); // doDwrd(adr+20,4); /* add dref to class name */ ea_t ptr = get_long(adr); make_ascii_string(ptr, namelen, ASCSTR_C); add_dref(adr, ptr, dr_O); op_offset(adr, OPND_MASK, REF_OFF32, ptr); rp_set_comment(adr+4, "Size", false); /* add cref to constructor */ ptr = get_long(adr+12); if ( ptr ) { add_cref(adr+12, ptr, fl_CN); op_offset(adr+12, OPND_MASK, REF_OFF32, ptr); } /* add dref to base class struct */ ptr = get_long(adr+16); if ( ptr ) { add_dref(adr+16,ptr,dr_O); op_offset(adr+16, OPND_MASK, REF_OFF32, ptr); } /* add dref to next class */ /* ptr = get_long(adr+20); if ( ptr ) { add_dref(adr+20,ptr,dr_O); op_offset(adr+20, OPND_MASK, REF_OFF32, ptr); } */ }
void find_bios_funcs() { ea_t i; make_ascii_string(0x06000200, 16, ASCSTR_C); doByte(0x06000210, 36); make_vector(0x06000234, NULL); make_vector(0x06000238, NULL); make_vector(0x0600023C, NULL); make_ascii_string(0x06000240, 4, ASCSTR_C); make_ascii_string(0x06000244, 4, ASCSTR_C); doDwrd(0x06000248, 4); doDwrd(0x0600024C, 4); make_vector(0x06000250, NULL); doDwrd(0x06000264, 4); make_vector(0x06000268, NULL); make_vector(0x0600026C, "bios_run_cd_player"); make_vector(0x06000270, NULL); make_vector(0x06000274, "bios_is_mpeg_card_present"); doDwrd(0x06000278, 4); doDwrd(0x0600027C, 4); make_vector(0x06000280, NULL); make_vector(0x06000284, NULL); make_vector(0x06000288, NULL); make_vector(0x0600028C, NULL); doDwrd(0x06000290, 4); doDwrd(0x06000294, 4); make_vector(0x06000298, "bios_get_mpeg_rom"); make_vector(0x0600029C, NULL); doDwrd(0x060002A0, 4); doDwrd(0x060002A4, 4); doDwrd(0x060002A8, 4); doDwrd(0x060002AC, 4); make_vector(0x060002B0, NULL); doDwrd(0x060002B4, 4); doDwrd(0x060002B8, 4); doDwrd(0x060002BC, 4); doDwrd(0x060002C0, 4); for (i = 0x060002C4; i < 0x06000324; i+=4) make_vector(i, NULL); set_name(0x06000300, "bios_set_scu_interrupt"); set_name(0x06000304, "bios_get_scu_interrupt"); set_name(0x06000310, "bios_set_sh2_interrupt"); set_name(0x06000314, "bios_get_sh2_interrupt"); set_name(0x06000320, "bios_set_clock_speed"); doDwrd(0x06000324, 4); set_name(0x06000324, "bios_get_clock_speed"); for (i = 0x06000328; i < 0x06000348; i+=4) make_vector(i, NULL); set_name(0x06000340, "bios_set_scu_interrupt_mask"); set_name(0x06000344, "bios_change_scu_interrupt_mask"); doDwrd(0x06000348, 4); set_name(0x06000348, "bios_get_scu_interrupt_mask"); make_vector(0x0600034C, NULL); doDwrd(0x06000350, 4); doDwrd(0x06000354, 4); doDwrd(0x06000358, 4); doDwrd(0x0600035C, 4); for (i = 0x06000360; i < 0x06000380; i+=4) make_vector(i, NULL); doByte(0x06000380, 16); doWord(0x06000390, 16); doDwrd(0x060003A0, 32); make_ascii_string(0x060003C0, 0x40, ASCSTR_C); add_func(0x06000600, BADADDR); add_func(0x06000646, BADADDR); make_ascii_string(0x0600065C, 0x4, ASCSTR_C); add_func(0x06000678, BADADDR); add_func(0x0600067C, BADADDR); add_func(0x06000690, BADADDR); doDwrd(0x06000A80, 0x80); }