ld: cannot perform PE operations on non PE output file 'a.exe'.
アセンブリ言語の教科書のサンプルをやってみました。
$ ld --oformat binary boot.obj ld: cannot perform PE operations on non PE output file 'a.exe'.
Linuxではこの方法でベタバイナリが吐けるらしい。しかし・・・Cygwin版gccのリンカldは何が何でもexeファイルを作りたがるっぽい。OSを作ろうの過去ログを漁ってみたけど、解決しないまま流れてた(汗
やっぱりldのマニュアルと格闘しなければならないか・・・ldを使いこなせれば、C言語でブートも出来る。や、やってみたい。
検索していてよくわからないキーワード達。
BFD libraries,objdump
このあたりが解決策か!?調べてみました。
$ objdump -i BFD ヘッダファイルバージョン 2.17.50 20060817 略 binary (header endianness unknown, data endianness unknown) i386
いけるかなぁ・・・昨日3時間位しか寝てないので早めに寝ます。
参考:GNU リンカ LD の使い方 CORONのブートまわり
追記:Mingw-users ld --oformat binary: PE operations on non PE file(英語) ベタバイナリは吐けるらしい。う〜リンクは出来ない。つまり、ELFフォーマットの解析は今後必修となるでしょう。っと。
追記:
as boot.S -o boot.obj ld -Ttext=7c00 -o boot.exe boot.obj objcopy -O binary boot.exe boot.bin
でベタバイナリ吐けます。でも、OS自作入門のobj2binを使ったほうが早いです。