Skip to content

Commit ccfe061

Browse files
committed
fix: Don't crash when trying to hook nullptr.
This is done so we can don't spam the log with exceptions on unsupported game versions, that mostly work.
1 parent 1407b63 commit ccfe061

3 files changed

Lines changed: 59 additions & 53 deletions

File tree

src/gta/pointers.hpp

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ namespace big
2121
eGameState* m_game_state{};
2222
bool* m_is_session_started{};
2323

24-
rage::game_skeleton* m_game_skeleton;
25-
void (*m_nullsub)();
24+
rage::game_skeleton* m_game_skeleton{};
25+
void (*m_nullsub)(){};
2626

2727
CPedFactory** m_ped_factory{};
2828
CNetworkPlayerMgr** m_network_player_mgr{};
@@ -40,75 +40,75 @@ namespace big
4040
CGameScriptHandlerMgr** m_script_handler_mgr{};
4141

4242
IDXGISwapChain** m_swapchain{};
43-
ID3D12CommandQueue** m_command_queue;
43+
ID3D12CommandQueue** m_command_queue{};
4444

45-
uint32_t* m_resolution_x;
46-
uint32_t* m_resolution_y;
45+
uint32_t* m_resolution_x{};
46+
uint32_t* m_resolution_y{};
4747

48-
memory::byte_patch* m_model_spawn_bypass;
48+
memory::byte_patch* m_model_spawn_bypass{};
4949

5050
functions::ptr_to_handle m_ptr_to_handle{};
5151
functions::handle_to_ptr m_handle_to_ptr{};
5252

53-
PVOID m_queue_dependency;
54-
PVOID m_sig_scan_memory;
53+
PVOID m_queue_dependency{};
54+
PVOID m_sig_scan_memory{};
5555

56-
void** m_ped_pool;
57-
void** m_prop_pool;
58-
void*** m_vehicle_pool;
56+
void** m_ped_pool{};
57+
void** m_prop_pool{};
58+
void*** m_vehicle_pool{};
5959

60-
Network** m_network;
60+
Network** m_network{};
6161

62-
functions::get_connection_peer m_get_connection_peer;
62+
functions::get_connection_peer m_get_connection_peer{};
6363

64-
functions::give_pickup_rewards m_give_pickup_rewards;
65-
functions::send_network_damage m_send_network_damage;
64+
functions::give_pickup_rewards m_give_pickup_rewards{};
65+
functions::send_network_damage m_send_network_damage{};
6666

67-
memory::handle m_blame_explode;
68-
memory::handle m_explosion_patch;
67+
memory::handle m_blame_explode{};
68+
memory::handle m_explosion_patch{};
6969

70-
functions::queue_packet m_queue_packet;
70+
functions::queue_packet m_queue_packet{};
7171

7272
//Sync Signatures START
73-
PVOID m_received_clone_sync;
74-
functions::get_sync_tree_for_type m_get_sync_tree_for_type;
75-
functions::get_sync_type_info m_get_sync_type_info;
76-
functions::get_net_object m_get_net_object;
77-
functions::get_net_object_by_id m_get_net_object_by_id;
73+
PVOID m_received_clone_sync{};
74+
functions::get_sync_tree_for_type m_get_sync_tree_for_type{};
75+
functions::get_sync_type_info m_get_sync_type_info{};
76+
functions::get_net_object m_get_net_object{};
77+
functions::get_net_object_by_id m_get_net_object_by_id{};
7878
//Sync Signatures END
7979

80-
functions::get_gameplay_cam_coords m_get_gameplay_cam_coords;
80+
functions::get_gameplay_cam_coords m_get_gameplay_cam_coords{};
8181

82-
functions::request_control m_request_control;
82+
functions::request_control m_request_control{};
8383

84-
CNetworkObjectMgr** m_network_object_mgr;
84+
CNetworkObjectMgr** m_network_object_mgr{};
8585

86-
PVOID m_receive_net_message;
87-
PVOID m_assign_physical_index;
86+
PVOID m_receive_net_message{};
87+
PVOID m_assign_physical_index{};
8888

89-
PVOID m_network_player_mgr_init;
90-
PVOID m_network_player_mgr_shutdown;
89+
PVOID m_network_player_mgr_init{};
90+
PVOID m_network_player_mgr_shutdown{};
9191

92-
PVOID m_terminate_game;
92+
PVOID m_terminate_game{};
9393

94-
PVOID m_handle_join_request;
95-
functions::write_join_response_data m_write_join_response_data;
96-
functions::get_peer_by_security_id m_get_peer_by_security_id;
94+
PVOID m_handle_join_request{};
95+
functions::write_join_response_data m_write_join_response_data{};
96+
functions::get_peer_by_security_id m_get_peer_by_security_id{};
9797

98-
functions::print_script_stack_trace m_print_script_stack_trace;
98+
functions::print_script_stack_trace m_print_script_stack_trace{};
9999

100-
int* m_be_restart_status;
101-
bool* m_needs_be_restart;
102-
bool* m_is_be_banned;
100+
int* m_be_restart_status{};
101+
bool* m_needs_be_restart{};
102+
bool* m_is_be_banned{};
103103

104-
uint8_t* m_battleye_status_update_patch;
104+
uint8_t* m_battleye_status_update_patch{};
105105

106-
PVOID m_prepare_metric_for_sending;
106+
PVOID m_prepare_metric_for_sending{};
107107

108-
bool* m_natives_registered;
109-
PVOID m_gta_thread_vtable;
108+
bool* m_natives_registered{};
109+
PVOID m_gta_thread_vtable{};
110110

111-
rage::sysMemAllocator* m_allocator;
111+
rage::sysMemAllocator* m_allocator{};
112112
};
113113

114114
inline pointers* g_pointers{};

src/hooking/detour_hook.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,22 @@ namespace big
2929

3030
void detour_hook::create_hook()
3131
{
32-
fix_hook_address();
33-
34-
if (auto status = MH_CreateHook(m_target, m_detour, &m_original); status == MH_OK)
32+
if (m_target == nullptr)
3533
{
36-
LOG(INFO) << "Created hook '" << m_name << "'.";
34+
LOGF(FATAL, "Failed to create hook '{}' because it's target is NULL", m_name);
35+
return;
3736
}
38-
else
37+
38+
fix_hook_address();
39+
40+
auto status = MH_CreateHook(m_target, m_detour, &m_original);
41+
if (status != MH_OK)
3942
{
4043
LOGF(FATAL, "Failed to create hook '{}' at 0x{:X} (error: {})", m_name, reinterpret_cast<std::uintptr_t>(m_target), MH_StatusToString(status));
44+
return;
4145
}
46+
47+
LOG(INFO) << "Created hook '" << m_name << "'.";
4248
}
4349

4450
detour_hook::~detour_hook() noexcept

src/hooking/hooking.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,19 @@ namespace big
3030
if (!g_is_enhanced)
3131
{
3232
detour_hook_helper::add<hooks::terminate_game>("Terminate Game", (void*)g_pointers->m_terminate_game); // Inlined in enhanced
33-
detour_hook_helper::add<hooks::handle_join_request>("HJR", (void*)g_pointers->m_handle_join_request);
33+
detour_hook_helper::add<hooks::handle_join_request>("Handle Join Request", (void*)g_pointers->m_handle_join_request);
3434
}
35-
detour_hook_helper::add<hooks::receive_net_message>("RNM", (void*)g_pointers->m_receive_net_message);
35+
detour_hook_helper::add<hooks::receive_net_message>("Receive Net Message", (void*)g_pointers->m_receive_net_message);
3636

3737
detour_hook_helper::add<hooks::prepare_metric_for_sending>("Prepare Metric For Sending", (void*)g_pointers->m_prepare_metric_for_sending);
3838

3939
detour_hook_helper::add<hooks::run_script_threads>("Script hook", (void*)g_pointers->m_run_script_threads);
4040
detour_hook_helper::add<hooks::init_native_tables>("Init Native Tables", (void*)g_pointers->m_init_native_tables);
4141
detour_hook_helper::add<hooks::script_vm>("Script VM", (void*)g_pointers->m_script_vm);
4242

43-
detour_hook_helper::add<hooks::network_player_mgr_init>("NPMI", (void*)g_pointers->m_network_player_mgr_init);
44-
detour_hook_helper::add<hooks::network_player_mgr_shutdown>("NPMS", (void*)g_pointers->m_network_player_mgr_shutdown);
45-
detour_hook_helper::add<hooks::assign_physical_index>("API", (void*)g_pointers->m_assign_physical_index);
43+
detour_hook_helper::add<hooks::network_player_mgr_init>("Network Player Mgr Init", (void*)g_pointers->m_network_player_mgr_init);
44+
detour_hook_helper::add<hooks::network_player_mgr_shutdown>("Network Player Mgr Shutdown", (void*)g_pointers->m_network_player_mgr_shutdown);
45+
detour_hook_helper::add<hooks::assign_physical_index>("Assign Physical Index", (void*)g_pointers->m_assign_physical_index);
4646

4747
g_hooking = this;
4848
}

0 commit comments

Comments
 (0)