2012-05-06 1 views
2

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

非常に多くの質問を1つの投稿に含めると申し訳ありません。しかし、すべての質問が1つの投稿を作成するのは面倒です。

ここで私の質問はWindows x86です。 だから私はとの難しさを持っています質問は次のとおりです。

  1. は常にプロセスの各スレッドに対して1つのコールスタックがありますか?つまり、スレッドはコールスタックを共有しませんか?

  2. 各コールスタックのサイズは固定ですか?それとも、スレッドごとに違うのですか?

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

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

-Michael

答えて

3

1)各スレッドは独自のスタックを持っている - ほとんどの定義による。

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

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

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