1

さて、これが取引です。DLLをターゲットプロセスに挿入し、そのレジスタの一部を読み取らせます。問題は、関数が呼び出されるたびに、取得する必要のあるコンテンツのサイズが絶えず変化することです。

ベクトルを使用できないので、事前にサイズがわからないバイトの配列を格納する場合はどうすればよいですか?

これがこれまでの私のコードですが、C3068のために明らかにコンパイルされません。

__declspec(naked) void _LocalHandleMessage()
{
    __asm {
        // Here i obviously have to store the data i'm sending to HandlePaquet
        sub esp, __LOCAL_SIZE
        pushad
        pushfd
    }

    {
        DWORD opcode;
        DWORD size;
        std::vector<BYTE> packetContent;
        HandlePaquet(opcode, size, packetContent, true);
    }

    __asm {
        popfd
        popad
        add esp, __LOCAL_SIZE
        retn
    }
}

また、クラスメンバーメソッドのアドレスをターゲットプロセスに挿入できるようにしたいのですが、十分にグーグルしない限り、それは不可能のようです。

4

1 に答える 1

1
  • データを保存するには、非常に簡単な方法があります-VirtualAlloc
  • または、dllで静的ベクトル変数を使用してみることができます。

アドレスの挿入について-フックについて話している場合-はい、できます。仮想メソッドテーブルを変更する必要があります。オープンソースのゲームハックで例を見つけることができます。

メンバーメソッドが仮想メソッドではなく、vtableに存在しない場合は、呼び出しオペコードを変更するか、メソッドの先頭にjmpxxxxxxxxを配置する必要があります。詳細はこちらをご覧ください

于 2012-10-11T11:20:02.983 に答える