[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 1176] Re: lcc-win32計画.



  こんにちは、川合です。


Koyanagi Masaaki さんは 2000/09/28 22:26:43 の「[OSASK 1173] Re:
 lcc-win32計画( 脱High C).」で書きました:

>cでアプリを作ろうとしてますが、なかなか進みません。

  スタックがたりないと、あっさりこけるので、デバッグにつまづいた
ら、スタックを増やしてみてください。

>実をいうと lcc-win32 って全然知らないです。
>名前はかすかに聞いたことがあるような...。

  実は僕も知ったのは1、2週間前のことです。MASMをダウンロードし
ようとあちこちうろうろしたら、たまたま見つけました。小柳さんが教
えてくださったページのどこかに「lcc-win32」に関する記述があって
それで試しに検索をかけたら見つかったんです。

  C++はサポートしていませんが、開発環境がVCよりもコンパクトで、
出力コードもVCよりコンパクトだったので、僕は惚れました。それで、
なんとかしてこれをHigh Cの代わりにできないものかと、いろいろやっ
て一度は諦めて、他の処理系を探しに出かけたのですが、MASMと組み合
わせる方法を思い付いてやり直して、ようやく成功したんです。

  ちなみに386|ASM→MASMの時とは違い、High C→lcc-win32の移行は.B
INファイルが大きくなります。そういう意味では退化しているのかもし
れません。しかし誰にでも入手できる処理系っていうのは捨て難い長所
なので、僕のお勧めはlcc-win32です。

>>   link32へのオプションはすさまじくなっています。/OUTと/MAPは省略
>> 可能かもしれません。しかし、その他のオプションは省略してはいけま
>> せん。この組み合わせをあみ出すのには苦労しました。リンク時にこの
>あみ出せるっていうのがすごいです。逆アセンブルをかけたりしているの
>でしょうか。

  はい。最初に、「link32 /?」でどんなオプションがあるのか確認し
て、後は試行錯誤です。適当なプログラムを書き、オプションの有無に
よって出力される.EXEファイルがどのように変わるかを、バイナリーダ
ンプや、NASM付属の逆アセンブラで根気よく調べました。

  ちなみに、僕は説明を間違えていたようです。正しくは、

prompt>lcc helloc1.c -I. -O
prompt>link32 /ALIGN:16 /BASE:0 /DRIVER /ENTRY:main /OUT:helloc1
exe /MAP:helloc1.map helloc1.obj gg00lib.lib stdlib.lib
prompt>exe2bin0 helloc1.exe helloc1.bin -s 2k

です。/DRIVERを付けるとファイル構造が単純になり、メモリイメージ
そのものになるようです。多分、デバイスドライバー用なんでしょう。
/BASE:0にすると、プログラムが0番地からロードされるときのイメージ
になってくれます(指定しないと、0x40000000からになる・・・/BASE:
0でこれが変更できるとわかるまで、かなり悩みました)。/ALIGNも指
定しないと、ファイル構造が複雑になってしまいます。

  /MAPと/OUTはlink32のオプションの挙動を調査していたときのなごり
です。だから多分なくても大丈夫だと思います。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.or.jp
Homepage http://www.imasy.or.jp/~kawai/