【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

VC++

inet

VC++でビルドしたinetがMINIXで動きました。 http://github.com/7shi/minix-tools/tree/20100227 ソースをインポートしてビルドしただけではパケットが壊れてすぐに落ちました。原因はbuf.hの以下のマクロでした。 #define ptr2acc_data(/* acc_t * */ a) (b…

フォルダ整理

VC++でMINIXのバイナリをビルドするためのソースツリーがごちゃごちゃして来たので、MINIXから持って来たソースをlib, servers, drivers, commandsにフォルダ分けして整理しました。 http://github.com/7shi/minix-tools/tree/20100226 今後カーネルに必要な…

shとmake

VC++でshとmakeをビルドしてMINIXで動かせるようになりました。yaccやlexを用意するのが面倒だったため、生成したソースを流用しています。 http://github.com/7shi/minix-tools/tree/20100225 shとmakeを入れ替えて、xzのconfigure(長いシェルスクリプト)…

pushf/popf

VC++でビルドしたバイナリをMINIXで動かしていて、strchr()で落ちることに気付きました。strchr()は組み込み関数として特別扱いされているため、C言語で記述してもVC++が受け付けてくれません。オプションで組み込み関数を無効にしてもダメです(VC++2005ま…

転送・実行スクリプト

VC++でMINIX用のバイナリを開発すると、動作確認が面倒です。ホスト(開発マシン)にInterixでFTPサーバを立てて(/etc/inetd.confでftpの行をコメントアウト)、ゲスト(MINIX)からアクセスして実行する手抜きスクリプトを書いてみました。 #!/bin/sh HOST…

libc

VC++のMINIXクロス開発でlibcをサポートしました。 http://github.com/7shi/minix-tools/tree/20100222 id:n7shi:20100209ではシステムコールを直接呼んでいましたが、libcをサポートしたことで以下のような普通のCプログラムが動きます。 #include <stdio.h> int mai</stdio.h>…

Sanos

VC++が出力したコードをMINIXで動かそうとして、64bit整数型の剰余(a % b)を計算する部分で__aulldvrmというシンボルを使用していたためリンクエラーになりました。32bitのx86では64bitを計算する命令がないため、コンパイラが出力するコードでは計算用の…

exit

VC++でexit()に必要な関数だけlibcから持って来て、動くようになりました。 http://github.com/7shi/minix-tools/tree/20100219 #include <stdlib.h> int errno; void start() { __exit(42); } CRTがないため、単発の関数をエントリポイントにしています。</stdlib.h>

MASMでシンボルをエクスポート

MASMでシンボルをエクスポートする方法として、PROC〜ENDPの方法がよく紹介されます。インポートしたシンボルにジャンプする例です。 .386 .MODEL FLAT .CODE EXTERN proc0:NEAR proc1 PROC jmp proc0 proc1 ENDP END 他のアセンブラから変換しようとするとE…

開発

VC++でビルドしたPEバイナリをa.outに変換してMINIXで動作しました。VC++内でバイナリ変換まで行うようにまとめました。 http://github.com/7shi/minix-tools/tree/20100208 MINIX用バイナリを生成するための設定は以下の通りです。