qwerzxc 发表于 2023-3-15 07:18

大佬们,目标地址存储类型是unicode,我怎么把他这块地址的值读取出来并且打印

void print_log(DWORD a)
{
char buff1 = { 0 };
WCHAR buffer2 = { 0 };
ReadProcessMemory(jcjb, (LPCVOID)(a), buff1, sizeof(buff1), 0);
UnicodeToANSI(buffer2, buff1);
//wcout << "日志:" <<(WCHAR*) buffer2 << endl;
wprintf(L"日志 :%S \n,日志2:%S", buffer2, buff1);
}
大佬们,目标地址存储类型是unicode,我怎么把他这块地址的值读取出来并且打印

answdl 发表于 2023-3-15 07:18

使用unicode字符集,要添加本地化支持
C语言
#include <locale.h>
setlocale(LC_ALL, "");
C++语言
#include <locale>
std::ios::sync_with_stdio(false);
std::locale::global(std::locale(""));
std::wcout.imbue(std::locale(""));

qwerzxc 发表于 2023-3-15 07:23

上面漏了一个函数的实现,我在这写出来
// Unicode字符串转ASCII
int WINAPI UnicodeToANSI(WCHAR* pUnicode, char* pANSI)
{
        int    iTextLen;
        // wide char to multi char
        iTextLen = WideCharToMultiByte(CP_ACP, 0, pUnicode, -1, NULL, 0, NULL, NULL);
        iTextLen = ::WideCharToMultiByte(CP_ACP, 0, pUnicode, -1, pANSI, iTextLen, NULL, NULL);
        return iTextLen;
}

only998 发表于 2023-3-15 08:34

有对标printf的宽字节版本   wprintf
有对标%s的宽字节版本%ws

qwerzxc 发表于 2023-3-15 08:43

only998 发表于 2023-3-15 08:34
有对标printf的宽字节版本   wprintf
有对标%s的宽字节版本%ws

大佬,这样写?
wprintf("日志: %ws\r\n", a);

only998 发表于 2023-3-15 08:53

本帖最后由 only998 于 2023-3-15 09:10 编辑

qwerzxc 发表于 2023-3-15 08:43
大佬,这样写?
wprintf("日志: %ws\r\n", a);
wprintf(L"%ws\n", cc);
不过控制台出来的中文可能是乱码。看7楼答案

only998 发表于 2023-3-15 09:14


按7楼大佬的帮助,操作可行。

qwerzxc 发表于 2023-3-15 09:22

only998 发表于 2023-3-15 09:14
按7楼大佬的帮助,操作可行。

谢谢大佬,明天给你补币
页: [1]
查看完整版本: 大佬们,目标地址存储类型是unicode,我怎么把他这块地址的值读取出来并且打印