プロが教える店舗&オフィスのセキュリティ対策術

OS等のソースを見るとC/C++とアセンブリのソースを組み合わせてリンクさせていますが、具体的にどのような手順で行っているのですか?リンカの設定を自分で行うのですか?(アセンブリはCPUやFirstBoot、ディスクアクセス関係等の担当でC/C++はそれ以外の部分だということは分かっています。)教えてください。

A 回答 (1件)

具体的なことは、ターゲットや開発環境によるので、一般的なことだけ書きます。



C/C++とアセンブリで書かれたコードをリンクさせるのは、それほど難しいことではありません。C/C++からアセンブリのコードを呼び出す(あるいはその逆)には、コーリングコンベンションをあわせるだけです。

例えば、Cで書かれた外部識別子は、アセンブラから使用する際はアンダースコアが付く(処理系によります)などの決まりがあります。C++の場合には、引数情報も外部シンボルに反映されるので、もっと複雑になります。
また、引数はスタックに積むのか、決まったレジスタが使われるのか、返却値の返し方はどうか、さらには関数を呼ぶ際に値を退避すべきレジスタはどれかといったルールをあわせる必要があるわけです。

OS等の場合であれば、ターゲットに応じてメモリマップを設定する必要があります。お察しの通り、メモリマップの設定はリンカで指定します(指定方法は処理系依存)。
他にも、割り込みやCPU例外等に関わるコード(ベクタテーブル等)も記述する必要があります。
    • good
    • 0
この回答へのお礼

詳しい説明ありがとうございます。
GCCを使用しているので
http://www.ertl.jp/~takayuki/readings/c/no06.html
あたりが参考になりそうです。

お礼日時:2005/03/16 11:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!