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ではこの方法でベタバイナリが吐けるらしい。しかし・・・Cygwingccのリンカ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を使ったほうが早いです。