在C ++中修改可执行文件的十六进制值(Windows)

时间:2015-02-10 19:35:41

标签: c++ windows hex type-conversion

我正在尝试修改在程序中插入十六进制值并写入它的可执行文件的特定部分,但我遇到类型转换问题。我发现的唯一方法是按ifs << (BYTE)0x12插入,但我无法创建动态变量。

这是功能:

int FileHexModify(int pos)
{
    fstream ifs;
    ifs.open ("C:\\Users\\User\\Desktop\\Modify.exe", fstream::binary | fstream::in | fstream::out);
    std::string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());

    ifs.seekp(pos);
    ifs << (BYTE)0x12;
    if (ifs.is_open())
        ifs.close();
    return 0;
}

当我尝试像

这样的东西时
char *code = "1b";
ifs.write(code, 16);

我在十六进制中得到与31 62对应的1 b,但我只需要一个值0x1b。我找不到办法。你能告诉我路吗? :)

提前致谢。

1 个答案:

答案 0 :(得分:0)

你想要char const* code = "\x1b"\x告诉编译器后跟一个十六进制数。此外,ifs.write(code, 16)是非常错误的。写入16个字节,而不是一个。 code中甚至没有16个字节!