std::vector<unsigned char> Data = example
我在互联网上的某个地方找到了这个,我认为它会将一个未知大小的字节数组写入给定地址,但我并不完全确定。谁能解释这是做什么的?
如果这不符合我的想法,那么有人可以帮助我生成一个 C++ 函数,该函数将地址和字节作为参数并将它们写入该地址,即:
myfunction(0xaddress, {0x10, 0x11, 0x12}); // something like this
std::vector<unsigned char> Data = example
我在互联网上的某个地方找到了这个,我认为它会将一个未知大小的字节数组写入给定地址,但我并不完全确定。谁能解释这是做什么的?
如果这不符合我的想法,那么有人可以帮助我生成一个 C++ 函数,该函数将地址和字节作为参数并将它们写入该地址,即:
myfunction(0xaddress, {0x10, 0x11, 0x12}); // something like this
向量的 = 运算符将复制右值的内容(假设右值是具有相同类型的向量类型或实现从相同类型转换为向量的类)。
这里没有地址被复制,只有内容。
如果要将 x 数量的字节写入地址,则有多种选择。
void myfunction(void* address, size_t count, const unsigned char data[])
{..}
const unsigned char bytes[] = {0x10, 0x11, 0x12};
myfunction (address, 3, bytes);
其中第二个参数 count 是数组的长度。
或使用可变参数函数:
void myfunction(void* address, size_t count, ...)
{..}
myfunction (address, 3, 0x10, 0x11, 0x12);
在所有情况下,您都需要明确给出字节数;编译器无法从数据中推断出这一点。
如果您想使用向量,这是可能的,但您需要在调用函数之前先填充向量,这样效率不高。
您不需要自己提供计数的唯一情况是,如果没有一个字节的值为 0,那么您可以编写
void myfunction(void* address, const char* str)
{..}
myfunction (address, "\x10\x11\x12");
因为你可以使用 strlen!
编辑:另外,std::basic_string<unsigned char>
值得研究。但是在这里,给它一个包含\x00
值的值也不是微不足道的。