-1
std::vector<unsigned char> Data = example

私はこれをインターネットのどこかで見つけました。特定のアドレスに未知のサイズのバイト配列を書き込むと思いますが、完全にはわかりません。誰がこれが何をするのか説明できますか?

そして、これが私が思っていることをしない場合、誰かがアドレスとバイトを引数として取り、そのアドレスにそれらを書き込むC++関数を作成するのを手伝ってくれます:

myfunction(0xaddress, {0x10, 0x11, 0x12}); // something like this
4

2 に答える 2

2

アドレスに x バイト量を書き込みたい場合、いくつかのオプションがあります。

void myfunction(void* address, size_t count, const unsigned char data[])
{..}

const unsigned char bytes[] = {0x10, 0x11, 0x12};
myfunction (address, 3, bytes);

ここで、2 番目の引数 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

于 2012-05-03T08:39:06.790 に答える
2

ベクトルの = 演算子は、右辺値の内容をコピーします (右辺値が同じ型のベクトル型であるか、この同じ型からベクトルへのキャストを実装するクラスであると仮定します)。

ここではアドレスはコピーされず、内容のみがコピーされます。

于 2012-05-03T08:02:50.460 に答える