0

私はしばらくの間(実際のモードと保護されたモードの両方で)アセンブリとOSの開発で遊んでおり、カーネルモード(「リング0」、別名「完全な特権」)で作業していたので、以前は常にスタックの設定について心配する必要がありました。スタック命令(プッシュ/ポップ)を使用します。

今、私はユーザーモードの32ビットアセンブリプログラム(WindowsとLinuxの両方)を見てきましたが、私が見たすべてのプログラム例は、最初にスタックを設定せずにスタック命令を使用しただけであることに気付きました。これはどういう意味ですか?OSは、プロセスを開始する前にプロセススタック自体を設定しますか?

前もって感謝します、

ジョアンシルバ。

4

1 に答える 1

1

あなたはすでに自分で答えを出しました:

コード、グローバル データ (ヒープ)、およびローカル データ (スタック) に必要なすべてのメモリを提供することは、システムの義務の一部です。

[更新: これは言及しないでおくべきではありません: 権限の低いリングに入ると、ユーザー空間アプリケーションは通常、このユーザー空間アプリケーションがスタックをセットアップすることは容易ではありません。割り当てるには、システム コールを実行する必要があります。しかし、すべてのアプリケーションの約 99.999% がスタックを必要とするため、開発者が各プログラムでスタックを要求することを強制せずに、最初からすべてのユーザー空間アプリケーションにスタックを提供することも同様に経済的です。/アップデート]

于 2012-09-15T12:26:00.347 に答える