想象一下,下面的字节数组包含一个可执行文件(.exe(的所有字节(实际上,这是不可能在源代码中设置的,因为这个文件类型(.exe(中有很多字节,Visual Studio会崩溃(
char buffer[] = { 0x60, 0x33, 0xC0, 0x33, 0xDB, 0xEB, 0x00, 0x03, 0xC3 };
然后,我认为实现这一点的更好方法是从.exe文件生成所有字节(PS:类似XTEA Runtime Crypter,但没有变量声明(,并插入到.bin文件中,稍后在char buffer[]
上设置,类似于以下内容:
vector<char> buffer;
ifstream infile;
infile.open("bytes.bin", ios::binary);
infile.seekg(0, ios::end);
size_t file_size_in_byte = infile.tellg();
buffer.resize(file_size_in_byte);
infile.seekg(0, ios::beg);
infile.read(&buffer[0], file_size_in_byte);
infile.close();
然后我问:
生成.bin文件的正确字节格式是什么?
0x60, 0x33, 0xC0, 0x33, 0xDB, 0xEB, 0x00, 0x03, 0xC3
-前面是0x,用逗号和空格分隔(就像链接的C++代码已经做的那样(0x600x330xC00x330xDB0xEB0x000x030xC3
-是否有任何空格/分隔60, 33, C0, 33, DB, EB, 00, 03, C3
-用逗号和空格分隔,但前面不加0x- 像十六进制编辑器中显示的那样(前面没有0x,也没有逗号分隔(
您根本不格式化,只写原始字节。您正在使用读取原始字节
infile.read(&buffer[0], file_size_in_byte);
类似地,用ios::binary
打开输出文件,然后简单地调用
outfile.write(&buffer[0], some_number_of_bytes);