- 805 名前:名無しさん@お腹いっぱい。 [2013/09/14(土) 17:51:53.43 .net]
- 質問です。
共有ライブラリのダイナミックシンボルを実行時に解決する際、 プログラムのtext部分は原則書き換え不可なので、 data部分のみ書き換えて対応しますよね。 実際、関数呼出しについてはdata上の番地を一旦呼んで そこから間接ジャンプするようになってます。 問題は、extern char *hoge[] みたいなデータが共有ライブラリ側にあって それをプログラム側から hoge のシンボルで参照する時です。 コンパイル結果では、hogeのアドレス値はイミーディエイトでレジスタにロード されているようで、これではシンボル解決の際に命令コードのイミーディエイト部分、 つまりtext部分を書き換えないといけないことになってしまいます。 それはおかしいと思いますが、実際にはどうやっているのでしょうか?
|

|