*なんすかこれ? [#r15fad1b] hideyosiのお勉強のページ♪~ GOとかtolsetとかの中にosalink1.exeっつーのがある。これは予測だけど、ポツンと.cファイルがあるだけってことから、たぶんGOとか(Kタンの自前開発環境)が出来る前に作られたものだと思う。~ (そうなると、MinGWだとか、別のきれいに整った開発環境で作られてるはず。そういう完成した環境ではみーんな付いてるので、.cをひとつ作ればツルっとexeが作れちゃうと。その証拠にMinGWだとペロっとコンパイルできて動いちゃうw) ・・・こいつが、28GOでコンパイルできない・・・ なんかムカつく! っつーわけで、よい教材になるかなと思って28GOでコンパイルできるように弄っていこうかと。こういうわけ! ちなみに、ここからダウンロードできるぞよ? http://sourceforge.jp/projects/osask/downloads/45468/osalink1_src_1.0.tar.gz/ *sjisconv.exe [#r2f6284e] こいつはなにをやっているのか。たしか、ソースコード内にShift-jisの文字が入っているとうまくないってんでそれをお掃除してくれるor変換してくれるツールだったはず。まずはコイツで・・・ ..\z_tools\sjisconv.exe -s osalink1.c osalink1.ca osalink1.caの中身を見てみると日本語部分がぜーんぶ「\203」とかそういうのになってる。変換されたわけですなw(なんだべこれ? rawとかそういうのになるのかな??) *cc1.exe [#w696591b] CのソースなんだからCでコンパイルすると。(あったりまえだぁw) COLOR(red){osalink1のソース内に、ctype.hが宣言されてる。これちょっと迷ったんだけど、MinGWではここ削除してもそのままコンパイルできちゃうので神頼み的にこれで進めちゃいます・・・} ここで復習。Cコンパイラはなにをしてるのか。総合環境だと忘れがちなんだけど、''Cコンパイラは実行ファイルなんかつくってくれない''! あくまでも、Cソースを元に''アセンブラコードを作ってくれる''だけなのだ。 こんなことしてアセンブラコードであるosalink1.gasを作ると・・・ ..\z_tools\cc1.exe -I../z_tools/win32/ -Os -Wall -quiet -o osalink1.gas osalink1.ca *gas2nask.exe [#g1a7aa7d] cc1で出来上がったosalink1.gas。これは先に述べたように、''単なるアセンブラコード''に過ぎない。その証拠に、エディタで開けたりするw さて。28GO(GO 0023)のCコンパイラは元々gccだった。そのため、このコンパイラが吐き出すアセンブラコードはgccとペアで使うことが想定されている GAS(The GNU Assembler)用のものなのだ。 つまり、このosalink1.gasをGASでコンパイル(アセンブル)すれば実行ファイルが出来上がると。COLOR(red){未確認ですサーセン} ・・・しかし! 我らが28GO(笑)にはGASよりカッチョイイnasuka(NASK)があるのだ! ・・・そんなわけで。GAS用のアセンブラコードをnasuka用に変換してやればいいわけ。それがgas2naskの役目ね。 ..\z_tools\gas2nask.exe -a osalink1.gas osalink1.nas これで、nasukaでアセンブルできるコード、osalink1.nasが出来上がったと。 *nask.exe(本名 nasuka ) [#uf795a47] アセンブラのnask.exeでアセンブルすると、これで初めて''バイナリコード''が生成されるわけ。 ..\z_tools\nask.exe osalink1.nas osalink1.o NASK : TMPBUF is not enough ・・・順調だったのに・・・orz・・・エラーで止まってしまった・・・ **エラーの解析と対処 [#v0619d68] COLOR(red){このセクションは移動or削除ora大改編が予想されますのでその旨ご容赦w} 「NASKのエラーなんて、ググってもなんもわかんないよおぉぉ(泣」 ・・・って思ってたら、それはそれ。インターネットってスゲーよね? めっけた。 http://www.rapuos.net/scrsvr.html これによると、''外部変数が多いと''NASKがこのエラーを吐くらしいことがわかった。外部変数ってなに??? 調べてみると、グローバル変数のことをこう呼ぶことがあるらしい。 osalink1.cの内部をざーーっと眺めてみる。グローバル変数? ほとんど使ってないじゃん。容量が上がるほどの変数なんて・・・お??? これかなぁ。先頭で #define BUFSIZE 2 * 1024 * 1024 こんなことをやっている。これが大きすぎるってことなのかなぁ。試しに、この行を1024とか小さい値と置き換えて・・・ うはぁ!!! NASKのコンパイルが通ったぞ??? COLOR(red){もちろん単にここを小さくするのは問題のはずだ。なぜこの値を指定していたのかは、ちゃんと意味があるんだからね。・・・でも、とにもかくにも、ここで宣言されている''値''によってNASKの挙動が左右されるってことだけは確認できた。正式な対処はちょっと先送りで、進めまするw}
(This host) = http://osask.net