- ベストアンサー
アセンブラのコードについて質問です。
call L_puts$stub というのはcall命令の意味は分かりますが後ろのL_puts$stubというのはどういった意味なのでしょうか?何かを足しているんですよね....?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
おそらく、Hello World を表示するようなサンプルコードをコンパイルして アセンブラのソースを出力させたと思われるので、 その前提で書いてみます。 L_puts$stub はスタブ関数です。 スタブ関数とは、とりあえず置いておく関数という意味です。 文字列の表示のために _puts を呼び出したいのですが、 _puts の実体は、動的リンクで呼び出されるために、 リンク時にはアドレス解決ができないので、とりあえず、 スタブ関数を置いておきます。 実行時には、実際の _puts のアドレスが解決されるので、 このスタブ関数は _puts に直接ジャンプするコードに置き換えられ、 文字列が表示されるようになります。 ですから、アセンブラのソース上では、L_puts$stub は、 _puts の参照や、halt命令が並んでいるだけの意味不明なコードに見えますが、 実行時には、_puts を直接呼び出すコードになる、と理解してください。
お礼
まさしくズバリでした。 もう少し条件を詳しく書くべきでしたね><すいません。 理解できました。ありがとうございます。