-3

私のコードは-

BYTE newValue[] = {0x90, 0x90, 0x90, 0x90};
*(char *)0x004C40DB = &newValue;

に設定しようとしてい004C40DBますnop

Visual C++ 2010 では、

1>------ ビルド開始: プロジェクト: ファイル、構成: リリース Win32

1> file.cpp 1>file.cpp(138): エラー C2440: '=': 'BYTE (*)[4]' から 'char' に変換できません

1> この変換が可能なコンテキストはありません

1>file.cpp(142): エラー C2440: '=': 'BYTE (*)[4]' から 'char' に変換できません

1> この変換が可能なコンテキストはありません

========== ビルド: 0 成功、1 失敗、0 最新、0 スキップ ==========

私は何を間違っていますか?

4

2 に答える 2

1

まず、自分のために C++ スタイルのキャストを使用します。

第 2 に、単一の を書きたい場合0x90、なぜそれらを 4 つ含む配列を作成するのでしょうか? 1つで十分です:

*reinterpret_cast<char *>(0x004C40DB) = 0x90;

しかし、おそらくWriteProcessMemory他の質問で述べたように使用する必要があり、最初に を使用してメモリを書き込み可能にする必要がありますVirtualProtect

最後に、本当に複数のバイトを書き込む必要がある場合は、データ型の一致に注意する必要があります。バイトへのポインタを 1 バイトに書き込むことはできません。ではWriteProcessMemory、正しいサイズを渡します。

独自のプロセスでメモリに書き込む場合は、std::copy代わりに使用します。

于 2012-08-05T21:16:42.563 に答える
0

これはあなたがやろうとしていることですか?

BYTE newValue[] = {0x90, 0x90, 0x90, 0x90};
*(long*)0x004C40DB = *(long*)newValue;

4 バイトをコピーしようとしている場合は、char へのポインターではなく、long へのポインターが必要です (long が 4 バイトであると仮定します)。

于 2012-08-05T21:12:01.850 に答える