2

最近、コールスタックを読んでいます。しかし、私が読んでいるすべての例と記事はシングルスレッドです。呼び出しスタックがメモリ内でどのように見えるか、そしてそれをどのように分析できるかに興味があります。

1つの投稿に非常に多くの質問が含まれていることをお詫び申し上げます。しかし、質問がすべて関連している場合、質問ごとに1つの投稿を作成するのは面倒なようです。

ここでの私の質問は、Windowsx86に関するものです。ですから、私が苦労している質問は次のとおりです。

  1. プロセス内のスレッドごとに常に1つの呼び出しスタックがありますか?つまり、スレッドはコールスタックを共有しませんか?

  2. 各呼び出しスタックのサイズは固定されていますか?または、スレッドごとに異なる可能性がありますか?

  3. 私たちがすべて自分たちでやっているふりをして、アセンブリでプログラムを書いてみましょう。コールスタックは魔法のように私たちに与えられていますか?それとも、自分で実装する必要がありますか?

  4. プログラムをアセンブリで作成する場合、それを設定するために、メモリを予約し、コールスタックメモリの開始アドレスをESPに設定しますか?

-マイケル

4

1 に答える 1

3

1)各スレッドには独自のスタックがあります-ほぼ定義上。

2) 最大スタック サイズは、ヘッダーで指定されたプロセス制限です。初期スレッド スタック サイズは、スレッド作成パラメーターです。CreateThread() API を参照してください。

3) OS がすべてのメモリを管理します。新しいスレッドのスタックは、スレッドの作成時にカーネルによって動的に割り当てられ、スタックの一番上にスタック フレームが埋められます。これにより、スレッドは割り込みと同様の方法でフレームをポップすることで実行を開始できます。戻る。家でこれをやろうとしないでください。

4) いいえ!CreateThread() API をインポートして呼び出します。

于 2012-05-06T19:15:23.593 に答える