1

次のコードを持つプロセスのスタックとレジスタを確認するとします...

...
void Test()
{
     for (int i = 0; i < 10; i++)
     {
          OneRunDontKnow();
     }
}
...

プロセスがループを実行するときにスタックを 2 回確認しますが、どちらの場合もOneRunDontKnowスタックの一番上にあります。

OneRunDontKnowスタックからポップアウトされてから再度プッシュされたのか、それともポップアウトされなかったのかをどうにかして知ることができますか?

編集:OneRunDontKnow任意の署名を持つことができます (パラメーターを受け取ったり、値を返したりすることもできます)。

4

1 に答える 1

0

おそらく最善の方法は、アセンブルされたコードを確認することです。 OneRunDontKnow()パラメータを取らないため、スタック上の唯一のものは命令ポインタとその他のスタックフレームのものになりますが、パラメータはありません。したがって、逆アセンブリで を呼び出す必要がある場所を見つけ、( 、、など) がコード内でどのOneRunDontKnow()ようなものであるかを確認します。PUSHJMPLOOP_LOOPLOOPE

于 2013-03-31T19:05:50.580 に答える