独自の非 GNU クロスプラットフォーム C++ 環境を構築しようとして、スタックの巻き戻しの基本を本当に理解していないという事実に直面しました。私が構築した環境は以下の通りです。
libc++
← libc++abi
← libunwind
(または他のアンワインダー)。
libc++abi
ある種の libunwind が既に含まれていることがわかりましたが、Linux では使用していません。私が理解したコメントから、それは特別な libunwind: LLVM Stack Unwinder であり、Darwin と ARM のみをサポートし、x86_64 はサポートしていません。CPU アーキテクチャがスタックの巻き戻しプロセスに影響を与えるのはなぜですか?
また、次のスタックアンワインダーについても知っています。
- glibc 組み込み。
- libc++abi LLVM libunwind.
- GNU libunwind (サバンナから)。
質問:
- プラットフォームまたは CPU アーキテクチャは、スタックの巻き戻しプロセスにどのように影響しますか?
- 1 つだけでなく、多くのスタック アンワインダーを使用する必要があるのはなぜですか?
- どのような種類のアンワインダーが存在し、それらの違いは何ですか?
回答からの期待:
各質問の個別のポイントだけでなく、このトピック全体をカバーする回答が得られることを期待しています.