c++ - 宽字符串 Visual Studio 2005 与 2017?

标签 c++ reverse-engineering

我正在尝试 Hook 一个用 Visual Studio 2005 编写的旧游戏的函数。

该函数使用 std::wstring,由于某种原因该函数根本不读取它,因为我使用的是 vs 2017。

我想知道 Visual Studio 2005 和 2017 中的宽字符串之间的区别。以及如何在 Visual Studio 2017 中使用 Visual Studio 2005 宽字符串?

注意: Hook 代码在 vs 2005 中运行良好。

提前致谢,致以最诚挚的问候。

更新#1:一个 friend 给我发了他的 vs 2005 的 wide string 类,但它仍然缺少 const wchar_t* 构造函数

namespace std {
class wstring {
    void *allocator;
    union  {
        wchar_t buffer[8];
        wchar_t* p_buffer
    } _myData;

    int size;
    int reserved_size;
};
}

最佳答案

经过一些研究人员和一些 friend 的帮助。我已经实现了我想要的,即使用 const wchar_t* 的构造函数构建 vs 2005 的旧 wstring 类并使用它。

class wstring05 {
    public:
        wstring05(const wchar_t* cstr)
        {
            allocator = nullptr;
            reserved_size = size = wcslen(cstr);
            if (size < 8)
                memcpy(buffer, cstr, (size + 1) * sizeof(wchar_t));
            else
                p_buffer = cstr;
        }

    private:

        void *allocator;
        union {
            wchar_t buffer[8];
            const wchar_t* p_buffer;
        };

        int size;
        int reserved_size;
    };

关于c++ - 宽字符串 Visual Studio 2005 与 2017?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48266710/

相关文章:

c++ - 为什么在C++阶乘函数中出现编译错误?

c++ - 如果ap是一个指针,为什么我可以通过ap[i]来引用它的值呢?

c++ - 有没有办法查看哪个线程正在使用 gdb 打印到 stdout 或 stderr?

android - 如何在 Android 上捕获应用程序流量

javascript - 如何使用用户定义的过滤器或其他方法控制通过 CSS 模块或样式化组件自动生成的动态类名

assembly - 如何找出逆向工程汇编中的第二个参数/寄存器?

c++ - 为 Windows 7 开发设置为 32 位

database - 类图之于程序就像________之于数据库?

在 Eclipse 版本 : Neon. 3 (4.6.3) 中使用 Papyrus 软件设计器进行 Java 逆向工程

c++ - 一组互斥任务的线程级并行性