Linker && Loader
■ このスレッドは過去ログ倉庫に格納されています
0001さとし ◆k4PcAe16
NGNG難しいような気がするんですが。。。
僕もリンカとローダを作れるようになれますか?
0065デフォルトの名無しさん
NGNG馬鹿はしねよ
0066デフォルトの名無しさん
NGNGもしなんかあったとき、対策とってなかったら叩かれ
るのも関係者だし。
0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNG0069デフォルトの名無しさん
NGNGドリキャスをネットにつないでる人って全ブラウザの数%を占めていたのか。
0070デフォルトの名無しさん
NGNG0071山崎渉
NGNG0072デフォルトの名無しさん
NGNG0073山崎渉
NGNG0074山崎渉
NGNG0075デフォルトの名無しさん
NGNG0076デフォルトの名無しさん
NGNG保守あげ
0077山崎渉
NGNG0078山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNG概念や理論だけは理解しろといいたいんだろ?
必ずしもこれを覚えなければ何もかも全くできない状況は
減りつつあるし
0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNG質問混じりのレスと煽りを一緒にするとは
0083山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNGいまのところこいつを詳しく知らないとプログラミングに困る状況がないんですが。
本に書いてある内容も、新しい言語では殆ど自動化されて
メモリ節約以外ではそんなに意識する必要瀬がないんではないかと。
0086デフォルトの名無しさん
NGNGふつーにアプリケーション作るなら、
こんな本読む必要はないでしょう。
雑学として覚えておいて損はないと思うけどね。
0087デフォルトの名無しさん
NGNGこんなことしりたがってる香具師は新しい言語でも作る気か?
いまから新しい言語をつくるよりも既存の言語用にフレームワークを開発しているほうが
ましだろ。
0088デフォルトの名無しさん
NGNG必須の知識だと思うが。
新しい言語だろうがそうでなかろうがな。
例えば、ActiveBasicの作者はこういう知識をもってるだろうし、
もっと華やかな所で言えば、gccやJavaなんかの開発チームは
こういう知識が必要だろ。
0089デフォルトの名無しさん
NGNG結局コンパイラを作りたいんじゃないかい。
作らない香具師には知識が増えるだけで関係ないって凝った。
0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNGOSつくるよりもその上で動くアプリケーション作ったほうが効率がよろし
0092デフォルトの名無しさん
NGNGなぜかELFなsoをwindowsで使わないといけない状況では、必要な知識でしょう。
そんな状況に直面する事は滅多に無いと思うが。
0093デフォルトの名無しさん
NGNGある人には関係あって、ある人には関係ない。
自分に関係ないからって、他人に文句言うのは筋違いだろ。
コンパイラ作るのが有意義な人だっているんだよ。
0094デフォルトの名無しさん
NGNG0095デフォルトの名無しさん
NGNGhttp://www.skyfree.org/linux/references/ELF_Format.pdf
これだけ?
それからELFの表現し得るすべてをldやそのリンカスクリプトで表現できるの?
(できないものを現したいときは、バイナリエディタか?w)
どっちにしてもELFのフォーマルな仕様書が仮にあったとしても、
その主な実装系たるGNUツールが対応してなければ、意味がないということか。。。
0096_
NGNG0097名無し@沢村
NGNGリンカをつくるのは、OMFやHEXのフォーマットを知っていれば充分だよ。
OMFはHEXのフォーマットは前はインテルのサイトからDLできたけど、いまはできないようだよ。
あと、ローダはWindowsが勝手にやってくれるから、つくる必要はないよ。
0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNGそれに対する、カーネルモジュールからローダー、リンカ、アセンブラ
なんかのツールを作ればかなり勉強になりそうだ。
誰かやったことある人いる?
0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG0102デフォルトの名無しさん
NGNG0103デフォルトの名無しさん
NGNGリンカの知識が必要なのはコード生成部なので、
なぜJavaCCと特定しているのかわからん。
0104デフォルトの名無しさん
NGNGJVM の内部に手を突っ込みたいなら必要。
0105デフォルトの名無しさん
NGNG0106_
NGNG0107名無し@沢村
NGNGアプリケーションプログラマーなんて、ツクールでRPGをつくってるやつと一緒でエンジニアとは言えないな。
ツクールそのものをつくるのがエンジニア。
0108デフォルトの名無しさん
NGNG今揉めてるSCOだけど、ELF、というかもう少し広く考えて
UNIXのABI全般に関しては一応ここかと
http://www.caldera.com/developers/devspecs/
0109デフォルトの名無しさん
NGNGツクールもアプリケーションだと思うけど・・・
0110デフォルトの名無しさん
NGNGお前は一生機械語だけでコーディングしてろ!
0111デフォルトの名無しさん
NGNG0112デフォルトの名無しさん
NGNGだれかあぼぼぼ
0113山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0114デフォルトの名無しさん
NGNG0115山崎 渉
NGNG0116山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0117デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNGだろうな。
ひげぽんにおせーてやれ。
藻前の作ってるOSにローダはいらねぇとな。
0119デフォルトの名無しさん
NGNGローダーっつー概念がなかったな。
(その後のバージョンはしらん)
つまりファイルイメージ=メモリイメージ だ。
完全リロケータブルなバイナリコードを前提として
ディスクからメモリに読み込むだけで
アドレスの解決は一切しない。
PC相対アドレッシングが強力な6809だからできたんだろうけど
(同じ命令でもPC相対のほうが早かったりした
80系でそんなことしたらえらい非効率だったろう。)
あと、ファイルイメージをそのままROMに焼けたりした。
起動プロセスがメモリマップをチェックして
マジックナンバーを見つけると
勝手にモジュールを認識してくれたりした。
0120デフォルトの名無しさん
NGNGC言語にはとってもとっても難しくって出来ない事が、
簡単に出来ちゃうから面白いよ。
外部結合の識別子を日本語に直してみたりね。
0121デフォルトの名無しさん
NGNG0122デフォルトの名無しさん
NGNG・ケーブル:Flash2Advance USB Linker
・ソフト:Flash2Advance Writer 3.1 Win9x/Me/NT/2000/XP (28-07-2003)
の組み合わせで手持ちのGBAのロムを吸い出そうと
しているんですがstartとserectを押しながら電源をonすると
Flash2Advance Writer 3.1がフリーズしてしまいます。
また本体側も認識した時特有の画面になりません。
デバイスマネージャーでUSBのドライバは認識しているよう
なんですが。
どのような不具合が考えられますでしょうか?
初心者の質問ですいません。
よろしくお願いいたします。
0123デフォルトの名無しさん
NGNG0124デフォルトの名無しさん
NGNGあなたの脳味噌が不正な処理を行っています。
最新の物を再インストールして下さい。
0125デフォルトの名無しさん
NGNG見たら、テストコードがぐちゃぐちゃに入ってて萎えた
0126デフォルトの名無しさん
NGNG間違ってるかもしれんけどw
0127デフォルトの名無しさん
NGNG>>613
>関連ドキュメントが少なすぎるぅぅぅ(泣
MINIXの本とか読んでみたら?
タンネンバウムのOSの本とかさ。
昔のbitには良くこんな記事があったんだが。
(図書館でバックナンバーを読んだ)
0128592 ◆m/EAH1Sb4Q
NGNG自分は今、「Loaderとはなんぞや?Linkerとはいったい全体なんなんだ?」って考えで
↓の本を読みながら学んでいるところです。
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-06437-9
オーバーレイの章を読んでいまいちピンとこないのでモヤモヤがあります。
ある方によると、
>オーバーレイを有効に使うためには、プログラムを同じタイミングで呼ばれる
>可能性がある複数の部分に *手作業で* 分割し、さらに読み込みタイミングを
>自分で制御する必要がある。
だそうですが、いまいちピンときません。
この部分は誰が(どこが)その処理を担当をするのか?
現在は、オーバーレイだけに時間をかけるわけに行かないので次に進んでます。
共有ライブラリの章に突入している途中ですが、今までCやC++でコーディングしてきたけど、
こんなことちっとも知らなかった。すばらしい、感動しました。(まだ読み終わってなく途中ですけど笑)
>>127
>MINIXの本とか読んでみたら?
>タンネンバウムのOSの本とかさ。
実はもう中古で買って読んじゃいました。でもLinkerやLoader関連なんてなかったような...
↓
MINIXオペレーティングシステム
>昔のbitには良くこんな記事があったんだが。
>(図書館でバックナンバーを読んだ)
むむっ!!見たい!知りたい!どこにあります?
0129592 ◆m/EAH1Sb4Q
NGNGあれ?
やっぱ誰も見てないんじゃないだろうか?>このスレ
鬱だ。
0130デフォルトの名無しさん
NGNGここのVROOMMというのは違うのかな?
0131デフォルトの名無しさん
NGNGloaderなかったら、program実行できないじゃない。
0132デフォルトの名無しさん
NGNG> GCCスレから誘導されてきました。
(略)
> この部分は誰が(どこが)その処理を担当をするのか?
人がやるかソフトウェアがやるかは環境によるよね。
オーバーレイだから、組み込み系の人に聞くんがいいんじゃない?
GCCスレに書いたけど、それやるアセンブラ、リンカ使ったことあるよ。
大型で動いていたHLISPってLispの処理系も自分でやってたね。
アドレス空間が狭かったからね。
0133デフォルトの名無しさん
NGNG共立出版の雑誌"bit"は、
大学の図書館(工学系)行けば必ずある。
0134デフォルトの名無しさん
NGNG良い奴等はみんな氏んじまった。
0135デフォルトの名無しさん
NGNG文系PGにはTransTechみたいな雑誌が丁度いいかと
思えたけど、あれも直ぐ潰れちゃったよね。
結局コボラー相手の雑誌しか生きのこれないということか。
0136592 ◆m/EAH1Sb4Q
NGNG>>130
>ttp://www.borland.co.jp/bcsuite/tc40j.html
>ここのVROOMMというのは違うのかな?
そうかもしれませんが、どうやってるのか知ることができません。Borlandの独自技術かな?
>>131
>loaderなかったら、program実行できないじゃない。
それはそうですけど、loaderやlinkerに関しての理論や説明が無いってことでした。
>>132
>人がやるかソフトウェアがやるかは環境によるよね。
>オーバーレイだから、組み込み系の人に聞くんがいいんじゃない?
>GCCスレに書いたけど、それやるアセンブラ、リンカ使ったことあるよ。
>大型で動いていたHLISPってLispの処理系も自分でやってたね。
>アドレス空間が狭かったからね。
なるほど、ありがとうございます。
うーむ、どうも最近それほどオーバーレイにこだわる必要はないんじゃないかって気がしてきました。
使用範囲が限られてるようだし..だから次の章に進んでます。
>>133
>共立出版の雑誌"bit"は、
>大学の図書館(工学系)行けば必ずある。
学生ではないんですが、一般の人でも入れるんですか?
0137デフォルトの名無しさん
NGNGゼロから全てのソフトを書き上げる能力を、皆が持っていた
時代から比べれば、今のPGはアホウの集まりのようだ。
原始人て、もの凄く頭悪そうなイメージがあるけど、実はかなり
賢い生き物だったのかもしれないね。生きるための創意工夫を
独自に発案できない椰子は生きていけない世界だったのかもしれない。
0138592 ◆m/EAH1Sb4Q
NGNG>文明が発達すると、人の能力も落ちてくるんじゃないのかな。
>ゼロから全てのソフトを書き上げる能力を、皆が持っていた
>時代から比べれば、今のPGはアホウの集まりのようだ。
>原始人て、もの凄く頭悪そうなイメージがあるけど、実はかなり
>賢い生き物だったのかもしれないね。生きるための創意工夫を
>独自に発案できない椰子は生きていけない世界だったのかもしれない。
そうですね。
人間って弱い生き物なので、一度うまくやってしまうとだんだんと楽をしようとしてしまって、
楽な方へ楽な方へと流されてしまう。
そして気づいたらそれをどうやってすればいいのか、どうなっているのかすらわからなくなってしまっている。
こういうことが最近多くなってきているような気がします。>我も
0139デフォルトの名無しさん
NGNGFORTRANのCOMMONは知っていますか?
これが現在最大派閥のオーバーレイじゃないかな。
それから大学の図書館で外部の人を入れないところなんてほとんどないよ。
大学の目的に反しているからね。身分証明書があればほとんどOK。
貸し出しはしてくれなくても有料コピーサービスは受けられる。
OPACで在庫図書を検索できるし。
気をつけるのは、学科の図書室は入れないことが多いこと。
0140592 ◆m/EAH1Sb4Q
NGNG>FORTRANのCOMMONは知っていますか?
>これが現在最大派閥のオーバーレイじゃないかな。
残念ながら、自分はFORTRANは使用したことがありません。
>それから大学の図書館で外部の人を入れないところなんてほとんどないよ。
>大学の目的に反しているからね。身分証明書があればほとんどOK。
>貸し出しはしてくれなくても有料コピーサービスは受けられる。
>OPACで在庫図書を検索できるし。
>気をつけるのは、学科の図書室は入れないことが多いこと。
わざわざ、知らせてくれてすいません。
そこ大学の学生でなければ見れないと思ってました。
後で気づいたんですけど国会図書館を使うっていう手段もあるなと思いました。
現在は、10章「動的なリンクとロード」を読み終えて、11章へ突入。
10章は、中々面白かったです。一番身近な感覚で勉強できますからね。
今日中に終わるか!?
0141592 ◆m/EAH1Sb4Q
NGNG最後は、Javaでした。ちょこっとしかなかったけど無いよりましか。
全てをざっと読んだ感想は、やはり一筋縄にはいかないものだと思った。
Linker、Loaderを詳細に分かりたい人はこの本だけでなく、
その他の書籍、Web、ソース参照等でカバーしなくてはいけないと思う。
自分もこれからいろいろと調べなくてはならないことが山程あるなと感じた。
0142デフォルトの名無しさん
NGNGをリンクする事は出来ないのでしょうか?
新規作成分のa.o b.o c.o と既存の流用可能な hoge.a があった
時に、a.o, b.o, c.o, hoge.a から libHoge.so を作りたいのですが、
どうしても hoge.a をリンクしても libHoge.soにシンボルがリンク
されません。
0143デフォルトの名無しさん
NGNG*.aはそうなっていないので、*.soに取り込むことはできない。
arで*.oにばらしてもダメ。
外部シンボルへの参照方法が根本的に違う。
0144デフォルトの名無しさん
NGNGそれはつまり、再配置可能な形態(EXE,DLL)と
オブジェクトファイルの違いということですか?
*.aというのは用はオブジェクトファイルの集合体ですよね。
オブジェクトファイル内のアドレス値は、ファイルイメージ内の
相対アドレスすら決定されていない(リンク時にそれは決定される)から。
逆に(EXE,DLL)は、ローダによって実行時に、各セクションごとメモリ上に
割り当てられるとしても、それはオブジェクトファイル形式にのっとった
操作だから、先頭から何バイト目かは分る。つまり相対アドレスが
決定できる。EXEはプロセス中に一つしか有り得ないから、
DLLとはまた少し事情が違うのかな。
0145デフォルトの名無しさん
NGNGLinux って *.a から *.so つくるよね?
ld -shared --whole-archive とかって...
0146デフォルトの名無しさん
NGNGgccの-fpicを調べてください。
>>143の最後の一行の意味がわかるかと。
0147145
NGNGんー、私が知りたいのは
>143 で
「*.aはそうなっていないので、*.soに取り込むことはできない。arで*.oにばらしてもダメ。」
って言ってるけど、-fpic とか -fPIC でコンパイルしててもダメ(ar で *.o にバラしてもダメ)なの?
なんか -fpic とか -fPIC つきでコンパイルしてたら、ar で *.o にバラしてそれから *.so に取り込めそうだけど...
0148デフォルトの名無しさん
NGNGただ、普通は.aだけ作る場合に-fpic付けることはまず無い。
0150デフォルトの名無しさん
NGNG0151デフォルトの名無しさん
NGNG0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG-lhoge とやった際、そのパスに、libhoge.a と libhoge.so の両方が
あった場合、どちらがリンクされるんでしょうか?
またlibhoge.aがリンクされる場合は、静的ライブラリの動的リンクって
事になるんでしょうか?
0156デフォルトの名無しさん
NGNGコードがPICでなくともTEXTRELを処理すれば普通に動きそうだけど。
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNGディスパッチテーブル。
0160デフォルトの名無しさん
NGNG書き換えたらプロセス間で共有出来なくなるが。
そういやWinのDLLって再配置できるけど、あれってメモリ上では共有されないの?
0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNGエクスポートする関数やグローバル変数なんじゃなくて、
モジュール内で参照してる、外部シンボルのことなんだよね?
実際、-fPICや-sharedつけても、外部シンボルを一切参照しない
コードなら、readelf -a foo.oの結果が全く同じだし。
0163デフォルトの名無しさん
NGNG内部のみ有効なシンボルであっても絶対番地参照してはならない。
そうして初めて外部シンボルだけ問題なモジュールとなる。
0164デフォルトの名無しさん
NGNGオオボケかましてました。自動変数だけのプログラム書いてました(汗
モジュールローカルなstatic変数とそれを用いるプログラム(宣言だけでは
もちろんダメ)を書いたら、-fPICの有無で、ちゃんとreadelf -aにおいて
異なる結果が得られました。何が違うのかはこれからよく見てみますが。
0165164
NGNGstatic int abc=2;
int foo(void){int i=abc;}
$gcc -c foo.c;readelf -a foo.o > nopic.txt;gcc -c foo.c -fPIC;readelf -a foo.o > pic.txt
$diff nopic.txt pic.txt
いろいろあるけどとりあえず、セクションごとのサイズに注目すると、
< [ 1] .text PROGBITS 00000000 000034 000010 00 AX 0 0 4
< [ 2] .rel.text REL 00000000 0002b0 000008 08 7 1 4
< [ 7] .symtab SYMTAB 00000000 000200 000090 10 8 8 4
< [ 8] .strtab STRTAB 00000000 000290 00001e 00 0 0 1
----
> [ 1] .text PROGBITS 00000000 000034 000024 00 AX 0 0 4
> [ 2] .rel.text REL 00000000 0002e8 000010 08 7 1 4
> [ 7] .symtab SYMTAB 00000000 000214 0000a0 10 8 8 4
> [ 8] .strtab STRTAB 00000000 0002b4 000034 00 0 0 1
この辺りかな。
・.rel.textのエントリが1 -> 2、.symtabが9 -> 10になってる。
・エントリのサイズは.rel.textが8バイト、.symtab16バイト。
・それぞれ、_GLOBAL_OFFSET_TABLE_という名前のエントリが増えてる。
ってな感じですかね。
■ このスレッドは過去ログ倉庫に格納されています