-1

私はまだ C++ で ASM を使用する方法を学習しようとしていますが、問題が発生しました。私がやりたいことは、プログラム内の整数のポインターを読み取ることだけです。

この整数に書き込むプログラムのコードは次のとおりです。

00A3EB6C - mov [edi+0C],eax

今、私がしたいのは[edi+0C]、そのアドレスでポインターを取得することだけです。このようにしたい理由は、他の方法では信頼できるメモリ ポインターを見つけることができなかったからです。

どんな助けでも大歓迎です!

言葉遣いが悪く、説明が難しくて申し訳ありません。

編集:私の最終的な目標は、Windows フォームのラベル[edi+0C]のアドレスのポインターに整数の値を表示することです。00A3EB6C

明確にするために、外部アプリケーションに接続された DLL を使用しています。

4

1 に答える 1

1

したがって、おそらく、次のような機能があります。

void func(...)
{
    asm {
      ... 

      mov [edi+0xc], eax
      ... 
    }
}

ここで、関数から eax の値を取得するには、ポインターを渡す必要があります。

void func(..., int *ptr)
{
    asm {
       ... 

       mov [edi+oxc], eax
       mov [ptr], eax
       ... 
    }
 }

または、戻り値として使用できます。

int func(...)
{
   int ret;

   asm {
       ... 

       mov [edi+oxc], eax
       mov [ret], eax
       ... 
    }

   return ret;
}

他のオプションもあるかもしれませんが、それらが最も簡単です。

実際にediへのポインターを取得したい場合は、ポインターへのポインターを引数として使用するか[またはポインターを戻り値として使用します-戻り値が正確に従うため、ポインターへのポインターを示します上記と同じパターン]

void func(..., int **ptr)
{
    asm {
       ... 

     // Assumes eax isn't used elsewhere below! 
     // Otherwise, find another free register. 
       mov [edi+oxc], eax
       lea [edi+0xc], eax      // LEA = load effective address. 
       mov [ptr], eax
       ... 
    }
 }
于 2013-01-01T11:03:14.317 に答える