You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MessageBox中以0xXXXXXX格式打印十六进制基地址而非字符

解决内存地址显示乱码问题

你的代码问题在于直接将内存地址(HMODULE类型)强制转换为字符串指针LPCSTR,MessageBoxA会把该地址指向的内存内容当作ASCII字符串解析,而非显示地址本身的数值,因此出现乱码。要显示0xABC345FF格式的十六进制地址,需要先把地址数值格式化为对应的字符串,再传递给弹窗。

修改后的代码

#include <cstdio> // 用于snprintf

void PrintBaseAddr() {
    while (true) {
        if (GetAsyncKeyState(VK_F6) & 0x80000) {
            // 获取模块基址并计算偏移,用uintptr_t适配32/64位程序
            uintptr_t BaseAddr = reinterpret_cast<uintptr_t>(GetModuleHandleA(NULL));
            BaseAddr += 0x351333;

            // 定义缓冲区存储格式化后的地址字符串
            char addrStr[32];
            // 格式化为0x开头的十六进制字符串,%llX对应64位地址,32位可用%X
            snprintf(addrStr, sizeof(addrStr), "0x%llX", BaseAddr);

            // 显示格式化后的可读地址
            MessageBoxA(NULL, addrStr, "Base Address", MB_OK);
        }
    }
}

关键说明

  • uintptr_t类型:这是与指针宽度匹配的整数类型,能同时兼容32位和64位程序,避免地址数值被截断。
  • snprintf格式化:将地址数值转换成0x开头的十六进制字符串,确保弹窗显示的是地址的数值而非内存内容。
  • 缓冲区大小:32字节足够容纳最长的64位十六进制地址格式(0x + 16位十六进制字符 + 字符串终止符)。

内容的提问来源于stack exchange,提问作者end41r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:55:21