Linker && Loader
■ このスレッドは過去ログ倉庫に格納されています
0001さとし ◆k4PcAe16
NGNG難しいような気がするんですが。。。
僕もリンカとローダを作れるようになれますか?
0202デフォルトの名無しさん
NGNGどっちかだと思ったんだよな。
ldのメッセージは前者っぽいんだけど
gccがcygwinネイティブなら後者かなー。
今携帯からなんでPEのリファレンスがねーのよ。
0203199
NGNGばいなりエディタでboot.oを各環境とも開いてみたらLinux側は先頭に
.ELF
があって、Cygwin側の先頭は
L<
text
って感じでした。
自分ではこれが何を意味しているか分からないですが参考までに。
よろしくお願いいたします。
0204デフォルトの名無しさん
NGNGリンカスクリプトのboot.lsが元のオブジェクトファイルの中から
.textセクションとか.rodataセクションを抜きだして
(セクション構造のない)ベタなbinaryにしようとしてるわけだけど、
このセクション構造がELFにあってPEにないもので、
cygwinで作ったバイナリがPEなもんだから
ldが処理できませーんとかになってんじゃないのかなみたいな
0205デフォルトの名無しさん
NGNGして詳細メッセージ出したのをはってもらえない?
0206199
NGNG$ ld -v -T img/boot.ls -o img/boot img/boot.o
GNU ld version 2.15.91 20040725
ld: PE operations on non PE file.
0207199
NGNG$ ld -V -T boot.ls -o img/boot boot.o
GNU ld version 2.15.91 20040725
Supported emulations:
i386pe
ld: PE operations on non PE file.
となりました。
0208デフォルトの名無しさん
NGNGhttp://my.execpc.com/~geezer/embed/bugs.htm#mingbug
0209デフォルトの名無しさん
NGNG超簡単なmsvcrtの関数使うサンプルとかないですかね?
そういや市販コンパイラが作るDLL関数の呼び出しコードって
インポートテーブルから
call DWORD ptr[import_table_address]
のようなことしてるけど、別に
mov eax, procedure_addres
call eax
としてもいいよなあ。
なんで1段参照増やしてんの?
インポートテーブル分無駄じゃない?
0210デフォルトの名無しさん
NGNGなるほどねー。
0211デフォルトの名無しさん
NGNGの各DLL関数名の前に付いている、
「ヒント」の値って、何を入れるんでしょうか?
意味がまるでわからないです。
0212デフォルトの名無しさん
NGNGどうせ名前で調べるし
0213デフォルトの名無しさん
NGNGこんなのどうやって知るのでしょうか。
参照するDLLを調べろということですかね。
どっかから入手したpecoff.docによると、
>6.4.3. Hint/Name Table
>Field Hint
>Description
> Index into the Export Name Pointer Table.
> A match is attempted first with this value. If it fails,
>a binary search is performed on the DLL's Export Name Pointer Table.
ということは、わかんなかったら0とかの適当な値でよいと言う事でしょうか。
試しに全部0にしてやったらうまくいきました。
このヒントは、パフォーマンス上の理由でしかないのでしょうか?
0214デフォルトの名無しさん
NGNGそうですね。
実験してとりあえず無視して問題なかったので、
しばらく放置プレイしときます。
0215デフォルトの名無しさん
NGNGリンカであらかじめ序数を控えておいた方が良いのかな。
DLLの関数を全部列挙するなんてAPIないですよね・・・。
objdump.exeで取ってくるしかない?
0216デフォルトの名無しさん
NGNG同じことだけど PE 解析ルーチンを書けばいい。
0217デフォルトの名無しさん
NGNGそれとexe自体よりスタートアップ作るのが面倒すぎる。
Win32APIしか使わないなら話は簡単だけど、
Cランタイム使えないとあんま意味ないんだよなあ。
とりあえずmsvcrt.dllを安全に使えるレベルとか考えてたけど
無理な気がしてきた。
mingwやlccwin解析すりゃいいんだろうけどね。
すげー遠い。
素直に既成のリンカへ.obj渡す事考えた方が早いかも。
0218デフォルトの名無しさん
NGNGという連載が始まったよ。
今回は13Pで、主に用語など基礎知識の説明でした。
次回はELF形式のお話みたいなんで期待。
0219デフォルトの名無しさん
NGNGInterfaceのこの手の記事は使えそうで使えないからなあ。
ELF形式なんてGNU系の資料いっぱいあるからPEやって欲しいのだが。
PEやる予定あるのかな。
無かったら笑えるがな。
0220デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNG0222デフォルトの名無しさん
05/02/05 10:26:280223デフォルトの名無しさん
05/02/06 03:09:02実行ファイルを作成した場合、必ずどっちが優先されるとか
ってあるんでしょうか?
0224Rubyist!
05/02/06 03:12:030225デフォルトの名無しさん
05/02/14 14:21:01内容上重複というか同じような事書いてる部分は多いかもしれないが
読んで楽しめるとは思う
ちなみにLinker"s"
sが付く、これ重要
どうでもいいが漏れの近くの書店ではHTMLの分類の所に
隣近所はHTMLとかホームページとか
田舎の書店のアルバイトじゃ分類タイトルみただけじゃそうなるだろうなぁ
0226デフォルトの名無しさん
05/03/05 05:38:080227デフォルトの名無しさん
05/03/05 05:49:40オタ本の分類だろうし
少なすぎるというかそもそもたくさんある類いの本じゃないよね
0228226
05/03/05 06:05:41もっと美しく言うと専門書籍って言わない?(萌え本みたいな印象もあるし)
0229226
05/03/05 06:21:23みんな(出版社とか)は、わかって無いよなぁ。チャンスなのに。
0230デフォルトの名無しさん
05/03/05 06:42:57萌え本ってなんですか?
0231デフォルトの名無しさん
05/03/05 08:36:54http://www.google.co.jp/search?hl=ja&q=%E8%90%8C%E3%81%88%E6%9C%AC&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
0232デフォルトの名無しさん
2005/05/26(木) 21:34:03×ぶっちゃけ、「Linkers & Loaders」のような本が少なすぎる。
○ぶっちゃけ、「Linkers & Loaders」のような本を読む人が少なすぎる。
0233デフォルトの名無しさん
2005/05/26(木) 22:02:200234本田& ◆xOS3wf.pJg
2005/05/27(金) 01:11:58PEフォーマットってCOFFフォーマットの別名だよ。
0235デフォルトの名無しさん
2005/05/27(金) 19:17:49L&LかInterfaceの連載くらいしか見たことない。
>>234
PEとCOFFは同一ではないから、別名というのは違う。
COFFを拡張したのがPE。
0236デフォルトの名無しさん
2005/05/28(土) 22:18:450237デフォルトの名無しさん
2005/06/25(土) 21:26:29いったいこれは何なのか。
私の書いたmain以外のstartとかendとかいったシンボル名は何なのかと。
0238デフォルトの名無しさん
2005/06/25(土) 23:22:56ソース見たほうが早いよね
0239デフォルトの名無しさん
2005/06/25(土) 23:50:58ソースがあるといいね。
0240デフォルトの名無しさん
2005/06/26(日) 00:27:02ただの entry point でしょ。
>>239
何でソースが無いと思ったの?
0241239
2005/06/26(日) 01:04:27crt0.oなんて名前はありきたりで環境が分からないから。
0242237
2005/06/26(日) 09:42:430243デフォルトの名無しさん
2005/06/26(日) 15:20:31いっぱいあるよ
0244デフォルトの名無しさん
2005/06/26(日) 15:32:33crt0ってのは(名前からすると)Cランタイムライブラリを初期化するためのコードで、
Cランタイムライブラリに依存するもの(≒Cコンパイラに依存するもの)。
ライブラリ(コンパイラ)のマニュアルに書いてあるかもしれないし、
コンパイラセットにソースコードが付いてることもある(少なくともMSVCには付いてる)。
0245デフォルトの名無しさん
2005/06/26(日) 15:36:410246デフォルトの名無しさん
2005/06/26(日) 16:27:580247デフォルトの名無しさん
2005/06/26(日) 16:55:090248237
2005/06/26(日) 23:49:070249デフォルトの名無しさん
2005/06/27(月) 00:32:080250デフォルトの名無しさん
2005/06/27(月) 08:51:190251237
2005/06/27(月) 22:21:580252デフォルトの名無しさん
2005/06/27(月) 23:35:470253デフォルトの名無しさん
2005/06/28(火) 01:07:570254デフォルトの名無しさん
2005/06/28(火) 17:46:07一応、適当なリンクを貼っておくが。
http://pc8.2ch.net/test/read.cgi/tech/1058134693/726-
0255237
2005/07/02(土) 19:27:180256デフォルトの名無しさん
2005/07/03(日) 04:05:18無能は震えながらではなく、藁のように氏ぬのだ。
0257デフォルトの名無しさん
2005/07/03(日) 14:35:28そういうの恥ずかしいから辞めようよ
0258デフォルトの名無しさん
2005/07/03(日) 18:39:57【鉄則】アホはスルー
0259デフォルトの名無しさん
2005/07/04(月) 15:02:230260デフォルトの名無しさん
2005/09/18(日) 16:41:50リンカからコンパイラ、アセンブラまで作ったが
さすがにOSはアホらしいな。
0261デフォルトの名無しさん
2005/11/24(木) 04:18:36もしかしてWindows付属のDLLって全部アドレス空間のどこにマップされるか、
最初から全部決まってるの?
0262デフォルトの名無しさん
2005/11/24(木) 06:46:410263デフォルトの名無しさん
2005/11/24(木) 10:53:100264デフォルトの名無しさん
2005/11/24(木) 16:38:48 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ (´´
∧∧ ) (´⌒(´
⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
 ̄ ̄ (´⌒(´⌒;;
ズザーーーーーッ
0265デフォルトの名無しさん
2005/11/24(木) 17:15:11それはもちろんそうなんだけど、仮想アドレス空間の無駄使いじゃない?
0266デフォルトの名無しさん
2005/11/24(木) 17:42:10ページは4kバイト単位なのでそうでもない
それに指定されたページにロードできなかった場合でも違う場所に割り当てられる
0267デフォルトの名無しさん
2005/11/24(木) 23:06:29世の中の大半の用途では、物理メモリはともかく
アドレス空間ケチるほどメモリ使わないので問題ない。
0268デフォルトの名無しさん
2005/11/24(木) 23:12:050269デフォルトの名無しさん
2005/11/24(木) 23:16:14くやしく
0270デフォルトの名無しさん
2005/11/24(木) 23:56:56>それに指定されたページにロードできなかった場合でも違う場所に割り当てられる
え、じゃあ例えば、俺の使ってるWindowsのNTDLL.DLL、
ImageBaseは0x77f80000という値になってるけど、これは
別の場所に再配置することも可能なの?
0271デフォルトの名無しさん
2005/11/24(木) 23:57:00ELFへの移行は
・共有ライブラリが作りやすい
・動的リンクがやりやすい
・クロス開発がやりやすい
・C++対応(コンストラクタとデストラクタ)
が主な理由。
64bit対応ってのは(当時と今は)あまり重要ではない。
未来は知らんが。
0272デフォルトの名無しさん
2005/11/25(金) 00:07:06DLLは基本的に再配置するものなので、必ず再配置セクションを持つ。
NTDLL.DLLも再配置セクションがあるので(dumpbinで覗いてみ)、
必要なら再配置できる。
0273デフォルトの名無しさん
2005/11/25(金) 01:32:46それだとImageBaseを固定するメリットってあんまりなくない?
0274デフォルトの名無しさん
2005/11/25(金) 02:31:37適当なアドレスに固定してるんじゃなくて、
一通りメモリに読み込んで再配置完了したのと同等のアドレスにしてある。
アプリ起動のたびにほぼ必ず読み込まれるシステム系のDLLを
毎回再配置しないで済む分、起動が速くなる。
0275デフォルトの名無しさん
2005/12/21(水) 10:46:27とりあえず、ヒントくれ
0276デフォルトの名無しさん
2005/12/21(水) 13:35:48objcpy
0277デフォルトの名無しさん
2005/12/25(日) 19:40:34Cygwin/Mingwが吐く relocatable object file は
MS環境でもリンクできる。
なので objcopy 最強。
0278デフォルトの名無しさん
2005/12/25(日) 23:37:14例えば
elf32-i386 -> elf32-powerpcle
とか。
0279デフォルトの名無しさん
2005/12/26(月) 00:50:29できたと思った。昔configureして
ぜんぶ入りのobjcopyを作ったことがある
0280278
2005/12/26(月) 16:09:38できないお >_<
$ objcopy -I elf32-i386 -O elf32-powerpcle foo foo-ppc
objcopy: Warning: Output file cannot represent architecture `i386'
targetにはちゃんと入ってるお
$ objcopy 2>&1 | tail -1
objcopy: supported targets: elf64-x86-64 elf32-i386 a.out-i386-linux efi-app-ia32 elf64-little elf64-big
elf32-little elf32-big elf64-alpha ecoff-littlealpha elf32-hppa-linux elf32-hppa elf64-ia64-little elf64-ia64-big
efi-app-ia64 elf32-m68k a.out-m68k-linux elf32-powerpc aixcoff-rs6000 elf32-powerpcle ppcboot
elf64-powerpc elf64-powerpcle aixcoff64-rs6000 elf32-s390 elf64-s390 elf32-sparc a.out-sparc-linux
elf64-sparc a.out-sunos-big srec symbolsrec tekhex binary ihex
0281デフォルトの名無しさん
2005/12/27(火) 20:48:330282デフォルトの名無しさん
2006/02/17(金) 13:52:541時間以内に返答が無かったら賛同してくれるものと見なす。
0283デフォルトの名無しさん
2006/02/17(金) 14:14:27まさか、単なる保守 age じゃないよね??
0284デフォルトの名無しさん
2006/02/17(金) 14:17:11ネタはないですね。そろそろ落ちるんじゃないかと思った。
しいて言えば本購入予定です。ハイ。
0285デフォルトの名無しさん
2006/02/20(月) 11:25:050286デフォルトの名無しさん
2006/02/21(火) 10:47:360287デフォルトの名無しさん
2006/04/25(火) 10:08:260288287
2006/04/25(火) 13:37:56.so → .lo
というlibtool版か。
.soはあるのに、.laがなくなると起動しなくなるものがあるって事は、
.laをdlopenしているアプリがあるのかな。
0289287
2006/04/25(火) 16:17:410290デフォルトの名無しさん
2006/04/28(金) 22:50:10そーそー、textファイルだから、開けてびっくりするよな。
libディレに、んなもんイッパイ入れんな!と、最初思ったよ。
0291デフォルトの名無しさん
2006/08/24(木) 07:04:11わかるやつおらんかね?
さっぱり意味のわかる資料がない
自分でリソース追加したいんだが
0292デフォルトの名無しさん
2006/08/24(木) 22:16:10■ このスレッドは過去ログ倉庫に格納されています