Fix Layering Iverwrites
This commit is contained in:
parent
37e1abbdd3
commit
e1f0787e48
2
dependencies/symbol-processor/src
vendored
2
dependencies/symbol-processor/src
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 853481bd9ae617747fd1a5d0b6255bdf3946c6dd
|
Subproject commit 9697b35de4d783282afdd3a4c643951ce49a0158
|
@ -62,3 +62,4 @@ TRUE Display Date In Select World Screen
|
|||||||
TRUE Optimized Chunk Sorting
|
TRUE Optimized Chunk Sorting
|
||||||
TRUE Disable Buggy Held Item Caching
|
TRUE Disable Buggy Held Item Caching
|
||||||
TRUE Add Reborn Info To Options
|
TRUE Add Reborn Info To Options
|
||||||
|
FALSE Track FPS
|
@ -27,13 +27,12 @@ void _overwrite_call(const char *file, int line, void *start, void *target);
|
|||||||
static name##_t _helper_for_##target = __overwrite_helper_for_##name(target, _original_for_##target)
|
static name##_t _helper_for_##target = __overwrite_helper_for_##name(target, _original_for_##target)
|
||||||
|
|
||||||
// Replace All Calls To Method start With target
|
// Replace All Calls To Method start With target
|
||||||
void _overwrite_calls(const char *file, int line, void *start, void *target);
|
void *_overwrite_calls(const char *file, int line, void *start, void *target);
|
||||||
#define overwrite_calls_manual(start, target) _overwrite_calls(__FILE__, __LINE__, start, target)
|
#define overwrite_calls_manual(start, target) _overwrite_calls(__FILE__, __LINE__, start, target)
|
||||||
#define overwrite_calls(start, target) \
|
#define overwrite_calls(start, target) \
|
||||||
{ \
|
{ \
|
||||||
_setup_fancy_overwrite(start, start, target); \
|
_setup_fancy_overwrite(start, start, target); \
|
||||||
overwrite_calls_manual((void *) start, (void *) _helper_for_##target); \
|
start = (start##_t) overwrite_calls_manual((void *) start, (void *) _helper_for_##target); \
|
||||||
start = _helper_for_##target; \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Replace All Calls To Virtual Method start With target
|
// Replace All Calls To Virtual Method start With target
|
||||||
@ -45,7 +44,12 @@ void _overwrite_calls(const char *file, int line, void *start, void *target);
|
|||||||
|
|
||||||
// Replace All Calls To start With target Within [to, from)
|
// Replace All Calls To start With target Within [to, from)
|
||||||
void _overwrite_calls_within(const char *file, int line, void *from, void *to, void *start, void *target);
|
void _overwrite_calls_within(const char *file, int line, void *from, void *to, void *start, void *target);
|
||||||
#define overwrite_calls_within(from, to, start, target) _overwrite_calls_within(__FILE__, __LINE__, from, to, start, target)
|
#define overwrite_calls_within_manual(from, to, start, target) _overwrite_calls_within(__FILE__, __LINE__, from, to, start, target)
|
||||||
|
#define overwrite_calls_within(from, to, start, target) \
|
||||||
|
{ \
|
||||||
|
start##_t type_check = target; \
|
||||||
|
overwrite_calls_within_manual(from, to, (void *) start, (void *) type_check); \
|
||||||
|
}
|
||||||
|
|
||||||
// Get Target Address From BL Instruction
|
// Get Target Address From BL Instruction
|
||||||
void *extract_from_bl_instruction(unsigned char *from);
|
void *extract_from_bl_instruction(unsigned char *from);
|
||||||
@ -55,9 +59,8 @@ void _overwrite(const char *file, int line, void *start, void *target);
|
|||||||
#define overwrite_manual(start, target) _overwrite(__FILE__, __LINE__, (void *) start, (void *) target)
|
#define overwrite_manual(start, target) _overwrite(__FILE__, __LINE__, (void *) start, (void *) target)
|
||||||
#define overwrite(start, target) \
|
#define overwrite(start, target) \
|
||||||
{ \
|
{ \
|
||||||
_check_if_method_is_new(start); \
|
|
||||||
start##_t type_check = target; \
|
start##_t type_check = target; \
|
||||||
overwrite_manual(start, (void *) type_check); \
|
overwrite_manual((void *) start, (void *) type_check); \
|
||||||
}
|
}
|
||||||
|
|
||||||
// Patch Instruction
|
// Patch Instruction
|
||||||
|
@ -77,7 +77,7 @@ static int _overwrite_calls_within_internal(const char *file, int line, void *fr
|
|||||||
#define TEXT_END 0x1020c0
|
#define TEXT_END 0x1020c0
|
||||||
// Overwrite All B(L) Intrusctions That Target The Specified Address
|
// Overwrite All B(L) Intrusctions That Target The Specified Address
|
||||||
#define NO_CALLSITE_ERROR "(%s:%i) Unable To Find Callsites For %p"
|
#define NO_CALLSITE_ERROR "(%s:%i) Unable To Find Callsites For %p"
|
||||||
void _overwrite_calls(const char *file, int line, void *start, void *target) {
|
void *_overwrite_calls(const char *file, int line, void *start, void *target) {
|
||||||
// Add New Target To Code Block
|
// Add New Target To Code Block
|
||||||
void *code_block = update_code_block(target);
|
void *code_block = update_code_block(target);
|
||||||
|
|
||||||
@ -93,6 +93,9 @@ void _overwrite_calls(const char *file, int line, void *start, void *target) {
|
|||||||
if (found < 1) {
|
if (found < 1) {
|
||||||
ERR(NO_CALLSITE_ERROR, file, line, start);
|
ERR(NO_CALLSITE_ERROR, file, line, start);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return
|
||||||
|
return code_block;
|
||||||
}
|
}
|
||||||
void _overwrite_calls_within(const char *file, int line, void *from /* inclusive */, void *to /* exclusive */, void *target, void *replacement) {
|
void _overwrite_calls_within(const char *file, int line, void *from /* inclusive */, void *to /* exclusive */, void *target, void *replacement) {
|
||||||
// Add New Target To Code Block
|
// Add New Target To Code Block
|
||||||
|
Loading…
Reference in New Issue
Block a user