mirror of
https://github.com/ocornut/imgui.git
synced 2026-11-10 08:25:54 +01:00
Update main.cpp
This commit is contained in:
parent
c37c325550
commit
0224c9a542
196
main.cpp
196
main.cpp
@ -8,7 +8,6 @@
|
||||
#include <fcntl.h>
|
||||
#include <dirent.h>
|
||||
|
||||
// --- 新增缺失的系统头文件 ---
|
||||
#include <link.h> // 提供 dl_iterate_phdr 和 dl_phdr_info
|
||||
#include <sys/mman.h> // 提供 mprotect 及 PROT_READ/WRITE/EXEC
|
||||
#include <cstdarg> // 提供 va_list, va_start
|
||||
@ -302,8 +301,6 @@ private:
|
||||
p.mapY = MemoryReader::FastRead<float>(addr6 + 0x54);
|
||||
}
|
||||
|
||||
// 修复警告:p.maxHp 是 int16_t(最大值 32767),无需和 50000 比较
|
||||
// 若大于 0 且小于其合理上限即可判定为有效实体
|
||||
if (p.maxHp > 0 && p.maxHp < 32000) {
|
||||
snap->players.push_back(p);
|
||||
}
|
||||
@ -320,7 +317,7 @@ private:
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
// UI 渲染器 (分离界面绘制逻辑)
|
||||
// UI 渲染器 (深蓝科技风重构版)
|
||||
// ============================================================================
|
||||
class UIRenderer {
|
||||
public:
|
||||
@ -339,16 +336,17 @@ public:
|
||||
|
||||
float finalScale = std::max(1.0f, h / 1000.0f) * m_userScale;
|
||||
ImGuiStyle& style = ImGui::GetStyle();
|
||||
style = m_defaultStyle;
|
||||
style = m_defaultStyle; // 每次绘制时重置为科技风基础样式
|
||||
style.ScaleAllSizes(1.2f * finalScale);
|
||||
style.WindowRounding = 12.0f;
|
||||
io.FontGlobalScale = 1.2f * finalScale;
|
||||
|
||||
ImGui_ImplOpenGL3_NewFrame();
|
||||
ImGui::NewFrame();
|
||||
|
||||
// 点击时渲染赛博荧光绿的波纹触控点
|
||||
if (touch.IsDown()) {
|
||||
ImGui::GetForegroundDrawList()->AddCircleFilled(io.MousePos, 20.0f, IM_COL32(0, 255, 0, 200));
|
||||
ImGui::GetForegroundDrawList()->AddCircleFilled(io.MousePos, 20.0f * finalScale, IM_COL32(0, 255, 170, 150));
|
||||
ImGui::GetForegroundDrawList()->AddCircle(io.MousePos, 28.0f * finalScale, IM_COL32(0, 255, 170, 200), 0, 2.0f);
|
||||
}
|
||||
|
||||
DrawMainWindow(w, h, snap);
|
||||
@ -368,11 +366,76 @@ private:
|
||||
static bool m_showDebugger;
|
||||
static bool m_showRadar;
|
||||
|
||||
// --- 应用赛博朋克深蓝科技风调色板 ---
|
||||
static void ApplyTechStyle(ImGuiStyle& style) {
|
||||
ImVec4* colors = style.Colors;
|
||||
colors[ImGuiCol_Text] = ImVec4(0.85f, 0.95f, 1.00f, 1.00f);
|
||||
colors[ImGuiCol_TextDisabled] = ImVec4(0.40f, 0.50f, 0.60f, 1.00f);
|
||||
colors[ImGuiCol_WindowBg] = ImVec4(0.06f, 0.06f, 0.09f, 0.96f);
|
||||
colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.25f);
|
||||
colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.12f, 0.98f);
|
||||
colors[ImGuiCol_Border] = ImVec4(0.15f, 0.55f, 0.85f, 0.60f);
|
||||
colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
|
||||
colors[ImGuiCol_FrameBg] = ImVec4(0.10f, 0.14f, 0.22f, 0.80f);
|
||||
colors[ImGuiCol_FrameBgHovered] = ImVec4(0.18f, 0.35f, 0.58f, 0.80f);
|
||||
colors[ImGuiCol_FrameBgActive] = ImVec4(0.22f, 0.45f, 0.75f, 1.00f);
|
||||
colors[ImGuiCol_TitleBg] = ImVec4(0.04f, 0.04f, 0.06f, 1.00f);
|
||||
colors[ImGuiCol_TitleBgActive] = ImVec4(0.08f, 0.20f, 0.38f, 1.00f);
|
||||
colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.00f, 0.00f, 0.00f, 0.51f);
|
||||
colors[ImGuiCol_MenuBarBg] = ImVec4(0.05f, 0.05f, 0.08f, 1.00f);
|
||||
colors[ImGuiCol_ScrollbarBg] = ImVec4(0.02f, 0.02f, 0.04f, 0.50f);
|
||||
colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.15f, 0.35f, 0.60f, 1.00f);
|
||||
colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.20f, 0.45f, 0.75f, 1.00f);
|
||||
colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.25f, 0.55f, 0.90f, 1.00f);
|
||||
colors[ImGuiCol_CheckMark] = ImVec4(0.20f, 0.85f, 1.00f, 1.00f); // 亮青色选中标记
|
||||
colors[ImGuiCol_SliderGrab] = ImVec4(0.20f, 0.55f, 0.85f, 1.00f);
|
||||
colors[ImGuiCol_SliderGrabActive] = ImVec4(0.30f, 0.70f, 1.00f, 1.00f);
|
||||
colors[ImGuiCol_Button] = ImVec4(0.10f, 0.30f, 0.55f, 0.80f);
|
||||
colors[ImGuiCol_ButtonHovered] = ImVec4(0.15f, 0.40f, 0.70f, 1.00f);
|
||||
colors[ImGuiCol_ButtonActive] = ImVec4(0.25f, 0.55f, 0.85f, 1.00f);
|
||||
colors[ImGuiCol_Header] = ImVec4(0.12f, 0.25f, 0.45f, 0.80f);
|
||||
colors[ImGuiCol_HeaderHovered] = ImVec4(0.18f, 0.35f, 0.60f, 1.00f);
|
||||
colors[ImGuiCol_HeaderActive] = ImVec4(0.22f, 0.45f, 0.75f, 1.00f);
|
||||
colors[ImGuiCol_Separator] = ImVec4(0.20f, 0.45f, 0.75f, 0.60f);
|
||||
colors[ImGuiCol_SeparatorHovered] = ImVec4(0.30f, 0.60f, 0.90f, 0.80f);
|
||||
colors[ImGuiCol_SeparatorActive] = ImVec4(0.40f, 0.75f, 1.00f, 1.00f);
|
||||
colors[ImGuiCol_ResizeGrip] = ImVec4(0.15f, 0.35f, 0.60f, 0.30f);
|
||||
colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.20f, 0.45f, 0.75f, 0.70f);
|
||||
colors[ImGuiCol_ResizeGripActive] = ImVec4(0.25f, 0.55f, 0.90f, 0.95f);
|
||||
colors[ImGuiCol_Tab] = ImVec4(0.10f, 0.25f, 0.45f, 0.85f);
|
||||
colors[ImGuiCol_TabHovered] = ImVec4(0.20f, 0.45f, 0.75f, 1.00f);
|
||||
colors[ImGuiCol_TabActive] = ImVec4(0.15f, 0.35f, 0.65f, 1.00f);
|
||||
colors[ImGuiCol_TableHeaderBg] = ImVec4(0.12f, 0.18f, 0.28f, 1.00f);
|
||||
colors[ImGuiCol_TableBorderStrong] = ImVec4(0.20f, 0.45f, 0.75f, 0.80f);
|
||||
|
||||
style.WindowPadding = ImVec2(12.0f, 12.0f);
|
||||
style.FramePadding = ImVec2(10.0f, 6.0f);
|
||||
style.CellPadding = ImVec2(8.0f, 6.0f);
|
||||
style.ItemSpacing = ImVec2(10.0f, 8.0f);
|
||||
style.ItemInnerSpacing = ImVec2(8.0f, 6.0f);
|
||||
style.ScrollbarSize = 10.0f;
|
||||
style.GrabMinSize = 12.0f;
|
||||
|
||||
// 工业风硬朗切角设计 (移除原本12.0f臃肿圆角)
|
||||
style.WindowBorderSize = 1.0f;
|
||||
style.ChildBorderSize = 1.0f;
|
||||
style.FrameBorderSize = 1.0f;
|
||||
style.WindowRounding = 4.0f;
|
||||
style.ChildRounding = 2.0f;
|
||||
style.FrameRounding = 2.0f;
|
||||
style.PopupRounding = 2.0f;
|
||||
style.ScrollbarRounding = 2.0f;
|
||||
style.GrabRounding = 2.0f;
|
||||
style.TabRounding = 2.0f;
|
||||
}
|
||||
|
||||
static void InitializeImGui() {
|
||||
ImGui::CreateContext();
|
||||
ImGui_ImplOpenGL3_Init("#version 300 es");
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
|
||||
m_defaultStyle = ImGui::GetStyle();
|
||||
ApplyTechStyle(m_defaultStyle);
|
||||
|
||||
const char* systemFonts[] = { "/system/fonts/SysSans-Hans-Regular.ttf", "/system/fonts/NotoSansCJKjp-Regular.otc" };
|
||||
for (const char* fontPath : systemFonts) {
|
||||
@ -387,39 +450,48 @@ private:
|
||||
ImGui::SetNextWindowPos(ImVec2(30, 30), ImGuiCond_FirstUseEver);
|
||||
ImGui::SetNextWindowSize(ImVec2(w * 0.6f, h * 0.45f), ImGuiCond_FirstUseEver);
|
||||
|
||||
if (ImGui::Begin("IL2CPP 性能极客版透视框架 [重构版]")) {
|
||||
ImGui::BeginChild("HookController", ImVec2(0, 70), true);
|
||||
if (ImGui::Begin("CYBER-CORE 战术覆写终端 v2.5")) {
|
||||
|
||||
// 模块挂载状态面板
|
||||
ImGui::BeginChild("HookController", ImVec2(0, 85), true);
|
||||
ImGui::TextColored(ImVec4(0.4f, 0.8f, 1.0f, 1.0f), "SYS_STATUS // 系统内核状态");
|
||||
ImGui::Separator();
|
||||
if (!m_isHookInstalled) {
|
||||
ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.8f, 0.2f, 0.2f, 1.0f));
|
||||
if (ImGui::Button("🔴 注入基址", ImVec2(-1, 40))) {
|
||||
ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.7f, 0.1f, 0.2f, 1.0f));
|
||||
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.9f, 0.2f, 0.3f, 1.0f));
|
||||
if (ImGui::Button("[ ⚠ ] 建立核心态神经链路 (Kernel Hook)", ImVec2(-1, 35))) {
|
||||
extern void InstallHooks();
|
||||
InstallHooks();
|
||||
}
|
||||
ImGui::PopStyleColor();
|
||||
ImGui::PopStyleColor(2);
|
||||
} else {
|
||||
ImGui::TextColored(ImVec4(0.0f, 1.0f, 0.0f, 1.0f), "✅ Hook 注入完成!");
|
||||
ImGui::TextColored(ImVec4(0.0f, 1.0f, 0.4f, 1.0f), "[ ONLINE ] 核心链路稳定连接中...");
|
||||
}
|
||||
ImGui::Text("状态: %s", m_hookStatusMsg.c_str());
|
||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "日志回复: %s", m_hookStatusMsg.c_str());
|
||||
ImGui::EndChild();
|
||||
|
||||
if (ImGui::CollapsingHeader("基础校准")) {
|
||||
ImGui::SliderFloat("菜单缩放", &m_userScale, 0.5f, 2.0f);
|
||||
ImGui::Checkbox("雷达 (Radar)", &m_showRadar); ImGui::SameLine();
|
||||
ImGui::Checkbox("指针断点调试", &m_showDebugger);
|
||||
if (ImGui::CollapsingHeader("TACTICAL_CALIBRATION // 基础校准", ImGuiTreeNodeFlags_DefaultOpen)) {
|
||||
ImGui::SliderFloat("终端UI缩放比例", &m_userScale, 0.5f, 2.0f);
|
||||
ImGui::Checkbox("启用全息雷达 (HUD Radar)", &m_showRadar); ImGui::SameLine();
|
||||
ImGui::Checkbox("启用内存探针 (Memory Debug)", &m_showDebugger);
|
||||
}
|
||||
ImGui::Spacing();
|
||||
|
||||
ImGui::TextColored(ImVec4(0, 1, 0, 1), "状态: %s", snap->inMatch ? "局内" : "等待数据...");
|
||||
ImGui::TextColored(ImVec4(0.0f, 1.0f, 1.0f, 1.0f), "DATA_STREAM // 实战数据流");
|
||||
ImGui::SameLine(ImGui::GetWindowWidth() - 150);
|
||||
ImGui::TextColored(snap->inMatch ? ImVec4(0, 1, 0, 1) : ImVec4(1, 0.5f, 0, 1),
|
||||
snap->inMatch ? "[ LIVE_SYNC_ON ]" : "[ SYNC_WAITING ]");
|
||||
|
||||
if (ImGui::BeginTable("PlayersTable", 5, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) {
|
||||
ImGui::TableSetupColumn("等级"); ImGui::TableSetupColumn("血量");
|
||||
ImGui::TableSetupColumn("蓝量"); ImGui::TableSetupColumn("金币");
|
||||
ImGui::TableSetupColumn("坐标"); ImGui::TableHeadersRow();
|
||||
ImGui::TableSetupColumn("等级 (LVL)"); ImGui::TableSetupColumn("装甲值 (HP)");
|
||||
ImGui::TableSetupColumn("能量值 (MP)"); ImGui::TableSetupColumn("晶体 (GOLD)");
|
||||
ImGui::TableSetupColumn("坐标系 (X,Y)"); ImGui::TableHeadersRow();
|
||||
for (const auto& p : snap->players) {
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn(); ImGui::Text("Lv.%d", p.level);
|
||||
ImGui::TableNextColumn(); ImGui::Text("%d/%d", p.hp, p.maxHp);
|
||||
ImGui::TableNextColumn(); ImGui::Text("%d", p.mana);
|
||||
ImGui::TableNextColumn(); ImGui::Text("%d", p.gold);
|
||||
ImGui::TableNextColumn(); ImGui::TextColored(ImVec4(1, 0.8f, 0, 1), "Lv.%d", p.level);
|
||||
ImGui::TableNextColumn(); ImGui::Text("%d / %d", p.hp, p.maxHp);
|
||||
ImGui::TableNextColumn(); ImGui::TextColored(ImVec4(0, 0.8f, 1, 1), "%d", p.mana);
|
||||
ImGui::TableNextColumn(); ImGui::TextColored(ImVec4(0.8f, 0.8f, 0.8f, 1), "%d", p.gold);
|
||||
ImGui::TableNextColumn(); ImGui::Text("%.0f, %.0f", p.mapX, p.mapY);
|
||||
}
|
||||
ImGui::EndTable();
|
||||
@ -429,60 +501,84 @@ private:
|
||||
}
|
||||
|
||||
static void DrawRadar(float w, float h, std::shared_ptr<GameSnapshot>& snap, float finalScale) {
|
||||
ImGui::SetNextWindowPos(ImVec2(w - 350, 30), ImGuiCond_FirstUseEver);
|
||||
ImGui::SetNextWindowSize(ImVec2(300, 300), ImGuiCond_FirstUseEver);
|
||||
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0, 0, 0, 0.5f));
|
||||
ImGui::SetNextWindowPos(ImVec2(w - 380, 50), ImGuiCond_FirstUseEver);
|
||||
ImGui::SetNextWindowSize(ImVec2(320, 320), ImGuiCond_FirstUseEver);
|
||||
|
||||
if (ImGui::Begin("Radar", nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize)) {
|
||||
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0.02f, 0.05f, 0.08f, 0.85f));
|
||||
ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.0f, 0.8f, 1.0f, 0.6f));
|
||||
|
||||
if (ImGui::Begin("HUD_Radar", nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize)) {
|
||||
ImVec2 p0 = ImGui::GetCursorScreenPos();
|
||||
ImVec2 size = ImGui::GetContentRegionAvail();
|
||||
ImDrawList* dl = ImGui::GetWindowDrawList();
|
||||
dl->AddRect(p0, ImVec2(p0.x + size.x, p0.y + size.y), IM_COL32(255, 255, 255, 100));
|
||||
ImVec2 center = ImVec2(p0.x + size.x * 0.5f, p0.y + size.y * 0.5f);
|
||||
|
||||
// 1. 绘制带有科技感的背板和外边框
|
||||
dl->AddRectFilled(p0, ImVec2(p0.x + size.x, p0.y + size.y), IM_COL32(10, 15, 25, 200), 8.0f);
|
||||
dl->AddRect(p0, ImVec2(p0.x + size.x, p0.y + size.y), IM_COL32(0, 180, 255, 150), 8.0f, 0, 1.5f);
|
||||
|
||||
// 2. 绘制战术十字辅助线 (Crosshair)
|
||||
dl->AddLine(ImVec2(center.x, p0.y), ImVec2(center.x, p0.y + size.y), IM_COL32(0, 150, 255, 80));
|
||||
dl->AddLine(ImVec2(p0.x, center.y), ImVec2(p0.x + size.x, center.y), IM_COL32(0, 150, 255, 80));
|
||||
|
||||
// 3. 绘制雷达同心圆扫描环
|
||||
dl->AddCircle(center, size.x * 0.25f, IM_COL32(0, 200, 255, 60), 32, 1.0f);
|
||||
dl->AddCircle(center, size.x * 0.45f, IM_COL32(0, 200, 255, 60), 32, 1.0f);
|
||||
|
||||
// 4. 绘制敌军坐标点位 (荧光特效)
|
||||
for (const auto& p : snap->players) {
|
||||
float nX = p.mapX / 10000.0f;
|
||||
float nY = p.mapY / 10000.0f;
|
||||
float rX = p0.x + (nX * size.x);
|
||||
float rY = p0.y + size.y - (nY * size.y);
|
||||
|
||||
if (nX > 0 && nX < 1 && nY > 0 && nY < 1) {
|
||||
dl->AddCircleFilled(ImVec2(rX, rY), 5.0f * finalScale, IM_COL32(255, 0, 0, 255));
|
||||
ImVec2 point(rX, rY);
|
||||
// 外发光层
|
||||
dl->AddCircleFilled(point, 8.0f * finalScale, IM_COL32(255, 50, 50, 80));
|
||||
// 内核实体
|
||||
dl->AddCircleFilled(point, 4.0f * finalScale, IM_COL32(255, 80, 80, 255));
|
||||
// 坐标连线(可选科技感)
|
||||
dl->AddLine(center, point, IM_COL32(255, 50, 50, 40), 1.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
ImGui::End();
|
||||
ImGui::PopStyleColor();
|
||||
ImGui::PopStyleColor(2);
|
||||
}
|
||||
|
||||
static void DrawDebugger(float w, float h, std::shared_ptr<GameSnapshot>& snap) {
|
||||
ImGui::SetNextWindowPos(ImVec2(100, 100), ImGuiCond_FirstUseEver);
|
||||
ImGui::SetNextWindowSize(ImVec2(w * 0.65f, h * 0.85f), ImGuiCond_FirstUseEver);
|
||||
|
||||
if (ImGui::Begin("指针断点排错器")) {
|
||||
if (ImGui::CollapsingHeader("动态偏移修改面板 (十进制)", ImGuiTreeNodeFlags_DefaultOpen)) {
|
||||
if (ImGui::Begin("MEMORY_PROBE // 内存深度探针探查器")) {
|
||||
if (ImGui::CollapsingHeader("OFFSET_MATRIX // 动态基址偏移修改矩阵", ImGuiTreeNodeFlags_DefaultOpen)) {
|
||||
auto& engine = EngineCore::GetInstance();
|
||||
std::lock_guard<std::mutex> lock(engine.GetOffsetMutex());
|
||||
auto& offsets = engine.GetOffsetsRef();
|
||||
|
||||
auto drawOffsetBtn = [](const char* label, uint32_t& val) {
|
||||
ImGui::PushID(&val);
|
||||
ImGui::TextColored(ImVec4(0.5f, 0.8f, 1.0f, 1.0f), "%s -> 当前: %d (0x%X)", label, val, val);
|
||||
if (ImGui::Button("-4")) { if (val >= 4) val -= 4; else val = 0; } ImGui::SameLine();
|
||||
if (ImGui::Button("+4")) val += 4;
|
||||
ImGui::TextColored(ImVec4(0.4f, 0.9f, 1.0f, 1.0f), "[ %s ] -> 当前十进制: %d (0x%X)", label, val, val);
|
||||
if (ImGui::Button(" - 4 ", ImVec2(50, 0))) { if (val >= 4) val -= 4; else val = 0; } ImGui::SameLine();
|
||||
if (ImGui::Button(" + 4 ", ImVec2(50, 0))) val += 4;
|
||||
ImGui::Separator();
|
||||
ImGui::PopID();
|
||||
};
|
||||
|
||||
drawOffsetBtn("地址1", offsets.x0ToAddr1);
|
||||
drawOffsetBtn("英雄数组", offsets.addr1ToAddr2);
|
||||
drawOffsetBtn("实体数据", offsets.itemToAddr3);
|
||||
drawOffsetBtn("地址1 (Lvl.1)", offsets.x0ToAddr1);
|
||||
drawOffsetBtn("英雄数组 (Array)", offsets.addr1ToAddr2);
|
||||
drawOffsetBtn("实体数据 (Entity)", offsets.itemToAddr3);
|
||||
}
|
||||
ImGui::Separator();
|
||||
ImGui::Spacing();
|
||||
|
||||
if (ImGui::CollapsingHeader("实时运行日志", ImGuiTreeNodeFlags_DefaultOpen)) {
|
||||
ImGui::BeginChild("LogRegion", ImVec2(0, 120), true, ImGuiWindowFlags_AlwaysVerticalScrollbar);
|
||||
if (ImGui::CollapsingHeader("SYSTEM_LOG // 终端底层执行回执", ImGuiTreeNodeFlags_DefaultOpen)) {
|
||||
ImGui::BeginChild("LogRegion", ImVec2(0, 150), true, ImGuiWindowFlags_AlwaysVerticalScrollbar);
|
||||
auto& logger = Logger::GetInstance();
|
||||
std::lock_guard<std::mutex> lock(logger.GetMutex());
|
||||
for (const auto& log : logger.GetLogs()) { ImGui::TextUnformatted(log.c_str()); }
|
||||
for (const auto& log : logger.GetLogs()) {
|
||||
ImGui::TextColored(ImVec4(0.6f, 0.8f, 0.6f, 1.0f), "> %s", log.c_str());
|
||||
}
|
||||
if (ImGui::GetScrollY() >= ImGui::GetScrollMaxY()) ImGui::SetScrollHereY(1.0f);
|
||||
ImGui::EndChild();
|
||||
}
|
||||
@ -496,7 +592,7 @@ ImGuiStyle UIRenderer::m_defaultStyle;
|
||||
bool UIRenderer::m_showDebugger = false;
|
||||
bool UIRenderer::m_showRadar = true;
|
||||
bool UIRenderer::m_isHookInstalled = false;
|
||||
std::string UIRenderer::m_hookStatusMsg = "等待点击注入...";
|
||||
std::string UIRenderer::m_hookStatusMsg = "等待用户指令...";
|
||||
|
||||
// ============================================================================
|
||||
// Dobby Hook 回调函数与模块基址寻找 (C 风格回调区)
|
||||
@ -551,13 +647,13 @@ void InstallHooks() {
|
||||
|
||||
uintptr_t base = GetModuleBase(kGameModule);
|
||||
if (!base) {
|
||||
UIRenderer::m_hookStatusMsg = "未找到 libil2cpp.so!";
|
||||
UIRenderer::m_hookStatusMsg = "ERR: 未找到目标模块 libil2cpp.so";
|
||||
LOG_ERROR("未找到目标游戏模块模块!");
|
||||
return;
|
||||
}
|
||||
|
||||
uintptr_t targetAddr = base + 0x73507bc;
|
||||
LOG_INFO("真实基址: 0x%lx, 目标: 0x%lx", base, targetAddr);
|
||||
LOG_INFO("SYS_BASE: 0x%lx, TARGET: 0x%lx", base, targetAddr);
|
||||
|
||||
void* pageStart = reinterpret_cast<void*>(targetAddr & ~0xFFF);
|
||||
mprotect(pageStart, 0x2000, PROT_READ | PROT_WRITE | PROT_EXEC);
|
||||
@ -568,10 +664,10 @@ void InstallHooks() {
|
||||
|
||||
if (ret == 0) {
|
||||
UIRenderer::m_isHookInstalled = true;
|
||||
UIRenderer::m_hookStatusMsg = "✅ 核心 Hook 注入成功!";
|
||||
UIRenderer::m_hookStatusMsg = "OK: 神经链路挂载完毕。";
|
||||
LOG_INFO("手动安装 Hook 成功!");
|
||||
} else {
|
||||
UIRenderer::m_hookStatusMsg = "❌ 挂钩失败";
|
||||
UIRenderer::m_hookStatusMsg = "FATAL: 挂载被拒绝或发生崩溃";
|
||||
LOG_ERROR("挂钩失败, 返回码: %d", ret);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user