update ida_find_addrs (thanks to drmext)
This commit is contained in:
parent
c79ff1856f
commit
72b1e4894a
@ -14,6 +14,10 @@ OFFSET_BLACKLIST = [
|
|||||||
0x100be154,
|
0x100be154,
|
||||||
0x100be346,
|
0x100be346,
|
||||||
0x100bed91,
|
0x100bed91,
|
||||||
|
0x100e56ec,
|
||||||
|
0x100e56f5,
|
||||||
|
0x100e5a55,
|
||||||
|
0x100e5a5e,
|
||||||
0x100fa4e2,
|
0x100fa4e2,
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -80,8 +84,12 @@ def get_table_size_by_xref(ea, entry_size):
|
|||||||
return (ea - orig_ea) // entry_size
|
return (ea - orig_ea) // entry_size
|
||||||
|
|
||||||
|
|
||||||
def find_weird_update_patches():
|
def find_weird_update_patches(music_limit):
|
||||||
ea = find_binary("83 C4 04 3B C5 74 09", 0, 0)
|
new = True if music_limit > 2040 else False
|
||||||
|
if new:
|
||||||
|
ea = find_binary("83 C4 04 89 44 24 14 C7", 0, 0)
|
||||||
|
else:
|
||||||
|
ea = find_binary("83 C4 04 3B C5 74 09", 0, 0)
|
||||||
orig_ea = ea
|
orig_ea = ea
|
||||||
|
|
||||||
values = []
|
values = []
|
||||||
@ -110,18 +118,26 @@ def find_weird_update_patches():
|
|||||||
|
|
||||||
ea = idc.FindFuncEnd(call_ea)
|
ea = idc.FindFuncEnd(call_ea)
|
||||||
lea_values = []
|
lea_values = []
|
||||||
lea_orders = [11, 10, 9]
|
if new:
|
||||||
|
lea_orders = [11, 11, 10, 10, 9, 9]
|
||||||
|
else:
|
||||||
|
lea_orders = [11, 10, 9]
|
||||||
while ea >= call_ea:
|
while ea >= call_ea:
|
||||||
if idc.GetMnem(ea) == "lea" and idc.GetOpnd(ea, 1).startswith('[ebx+'):
|
if idc.GetMnem(ea) == "lea" and idc.GetOpnd(ea, 1).startswith('[ebx+'):
|
||||||
lea_values.append([MUSIC_IDX, lea_orders[len(lea_values)], idc.GetOperandValue(ea, 1), ea])
|
lea_values.append([MUSIC_IDX, lea_orders[len(lea_values)], idc.GetOperandValue(ea, 1), ea])
|
||||||
|
|
||||||
# It is probably possible to pull a lot more from here
|
# It is probably possible to pull a lot more from here
|
||||||
if len(lea_values) == 3:
|
if new and len(lea_values) == 6:
|
||||||
|
break
|
||||||
|
elif not new and len(lea_values) == 3:
|
||||||
break
|
break
|
||||||
|
|
||||||
ea = idc.PrevHead(ea)
|
ea = idc.PrevHead(ea)
|
||||||
|
|
||||||
return lea_values[::-1] + values
|
if new:
|
||||||
|
return lea_values[-1::-2] + values
|
||||||
|
else:
|
||||||
|
return lea_values[::-1] + values
|
||||||
|
|
||||||
|
|
||||||
# These all reference the first entry in their respective tables
|
# These all reference the first entry in their respective tables
|
||||||
@ -179,7 +195,6 @@ update_patches = [
|
|||||||
[FLAVOR_IDX, 8, limit_info_list[FLAVOR_IDX][1] * 0x0c],
|
[FLAVOR_IDX, 8, limit_info_list[FLAVOR_IDX][1] * 0x0c],
|
||||||
[FLAVOR_IDX, 8, limit_info_list[FLAVOR_IDX][1] * 0x0c + 4],
|
[FLAVOR_IDX, 8, limit_info_list[FLAVOR_IDX][1] * 0x0c + 4],
|
||||||
]
|
]
|
||||||
update_patches_weird = find_weird_update_patches()
|
|
||||||
|
|
||||||
hook_addrs = [
|
hook_addrs = [
|
||||||
[0, find_binary("8B C6 E8 ?? ?? ?? ?? 83 F8 ?? 7D ?? 56 8A C3 E8 ?? ?? ?? ?? 83 C4 04 3D ?? ?? ?? ?? 7D ??", 0, 0)],
|
[0, find_binary("8B C6 E8 ?? ?? ?? ?? 83 F8 ?? 7D ?? 56 8A C3 E8 ?? ?? ?? ?? 83 C4 04 3D ?? ?? ?? ?? 7D ??", 0, 0)],
|
||||||
@ -200,6 +215,8 @@ print("<patches>")
|
|||||||
print("\t<limits>")
|
print("\t<limits>")
|
||||||
for limit_info in limit_info_list:
|
for limit_info in limit_info_list:
|
||||||
patch_target, limit_value = limit_info
|
patch_target, limit_value = limit_info
|
||||||
|
if TARGETS[patch_target] == "music":
|
||||||
|
music_limit = limit_value
|
||||||
print('\t\t<%s __type="u32">%d</%s>' % (TARGETS[patch_target], limit_value, TARGETS[patch_target]))
|
print('\t\t<%s __type="u32">%d</%s>' % (TARGETS[patch_target], limit_value, TARGETS[patch_target]))
|
||||||
print("\t</limits>")
|
print("\t</limits>")
|
||||||
|
|
||||||
@ -284,6 +301,7 @@ for patch_info in update_patches:
|
|||||||
print('\t\t<%s __type="str" method="%d" expected="0x%x">0x%x</%s>' % (TARGETS[patch_target], patch_type, search_value, ea + raw_bytes.index(raw_search_value), TARGETS[patch_target]))
|
print('\t\t<%s __type="str" method="%d" expected="0x%x">0x%x</%s>' % (TARGETS[patch_target], patch_type, search_value, ea + raw_bytes.index(raw_search_value), TARGETS[patch_target]))
|
||||||
print ""
|
print ""
|
||||||
|
|
||||||
|
update_patches_weird = find_weird_update_patches(music_limit)
|
||||||
for patch_info in update_patches_weird:
|
for patch_info in update_patches_weird:
|
||||||
patch_target, patch_type, search_value, ea = patch_info
|
patch_target, patch_type, search_value, ea = patch_info
|
||||||
raw_search_value = bytearray(struct.pack("<I", search_value))
|
raw_search_value = bytearray(struct.pack("<I", search_value))
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
## Database structure
|
## Database structure
|
||||||
|
|
||||||
Use this url to avoid songid collisions with other chart makers
|
Check the [community spreadsheet](https://docs.google.com/spreadsheets/d/18qPEH5OZH67Blq6ySlHRnxxfmojFmgG7GQ80Wyd21zY/edit?usp=sharing)
|
||||||
[community spreadsheet](https://docs.google.com/spreadsheets/d/18qPEH5OZH67Blq6ySlHRnxxfmojFmgG7GQ80Wyd21zY/edit?usp=sharing)
|
and **reserve a songid range** to avoid songid collisions with other chart makers
|
||||||
|
|
||||||
- do not use hiragana or kanji in the `fw_genre`/`fw_title`/`fw_artist` fields, they are used to sort the songlist. Only use full-width S-JIS characters.
|
- do not use hiragana or kanji in the `fw_genre`/`fw_title`/`fw_artist` fields, they are used to sort the songlist. Only use full-width S-JIS characters.
|
||||||
- use only lowercase filenames both inside your .ifs and for the .ifs themselves
|
- use only lowercase filenames both inside your .ifs and for the .ifs themselves
|
||||||
|
Loading…
Reference in New Issue
Block a user