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

2010-01-01から1年間の記事一覧

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用バイナリを生成するための設定は以下の通りです。

3.1.6リリース

FOSDEM 2010にあわせてMINIX 3.1.6がリリースされました。 ダウンロード id:n7shi:20100203のクロス開発環境の配布物を3.1.6に更新しておきました。Virtual PC 2007用のNICドライバが入っていますが、やや癖があるため説明します。

PEからa.outに変換して実行

a.outについて調べた結果、仕様的にはPEから変換が可能なようです。変換ツールを作ってみました。 http://github.com/7shi/pe2aout id:n7shi:20100207のコードをgcc(MinGW)でコンパイルして変換してみます。 % i686-mingw32-gcc -o exit.exe -masm=intel -s …

a.outの分析 (2)

id:n7shi:20100205に引き続いてa.outを分析します。アセンブリ版ではサイズ縮小のためセクションを削りましたが、セクションを確認するためC言語版を分析します。 int m[] = { 0, 1/*EXIT*/, 42, 0, 0, 0, 0, 0, 0 }; void start() { asm("mov eax, 0; mov e…

a.outの分析

id:n7shi:20100202でアセンブリ化したサンプルのダンプです。 00000000: 01 03 04 10 30 00 00 00-38 00 00 00 00 00 00 00 00000010: 00 00 00 00 00 00 00 00-38 00 50 00 00 00 00 00 00000020: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0000003…

githubにpushしたcommitの取り消し

githubにpushしてからcommitが間違っていたことに気付きました。以下のようにすると取り消すことができます。【注意】commitだけでなく変更も失われます。ローカルのソースツリーは残された最後のcommitに戻されます。変更を保存したい場合は使わないでくだ…

クロス開発環境構築

UNIX系OS上でMINIXのクロス開発環境を構築する方法です。ACKは後回しにして今回はgccだけです。MINIXはバイナリファイル形式としてa.outを使用しているため、binutilsやgccに独自のパッチを当てています。パッチ適用済みのソースはMinix Portsにまとめてあり…

libcなしでexit (2)

id:n7shi:20100201の続きです。インラインアセンブラをIntel形式にしてみました。 void start() { int m[] = { 0, 1/*EXIT*/, 42, 0, 0, 0, 0, 0, 0 }; asm("mov eax, 0; mov ecx, 3; int 0x21" :: "b"(m)); } # gcc -masm=intel -nostdinc -nostdlib exit.c…

libcなしでexit

結城浩先生のWikiにexitするだけのバイナリを削っていく記事の翻訳があります。 Linux で動く極小 ELF 実行ファイルをつくる怒涛のチュートリアル これをMINIXでもやってみようと思い、インラインアセンブラでシステムコールを呼ぶコードを書いてみました。 …

Virtual PCでネットワーク (3.1.5)

【追記】MINIX 3.1.6がリリースされました。VPCドライバが入っています。 ⇒ id:n7shi:20100208id:n7shi:20100130のドライバを3.1.5にバックポートして、簡単にインストールできるようにISOイメージを用意しました。 minix-3.1.5-tulip-20100131.iso Virtual …

Virtual PCでネットワーク (trunk)

【追記】MINIX 3.1.6がリリースされました。VPCドライバが入っています。 ⇒ id:n7shi:20100208MINIXのtrunkにはVirtual PCのNICドライバが追加されましたが、動作しなかったためパッチを作成しました。【追記】r6050で修正されました。 ⇒ Revision 6050: imp…

trunkのインストール

MINIXをリリースからtrunkに上げようとしてハマりました。/etcは自動マージできないため、ばっさり消してしまうと簡単でした。最低限、fstabは残しておきます。 cp /etc/fstab /tmp rm -rf /etc /usr/etc cd /usr/src/etc make install mv /tmp/fstab /etc c…

カーネルビルド時間 (Intel VT)

id:masami256:20100127のCore 2 Duo T9600 @ 2.80GHz+KVMの威力に圧倒されたので、Core 2 Quad Q9550 @ 2.83GHzでも計測してみました。 Virtual PC 2007 SP1 Intel VT有効 0:14.03 real 0:05.40 user 0:03.73 sys VMware Player 3.0.0 Intel VT有効 0:18.40 …

カーネルビルド時間

各種VMでMINIX 3.1.5を起動して、カーネルビルドの時間を計測しました。かなりスピード差があります。 Virtual PC 2007 SP1 AMD-V有効 0:27.90 real 0:12.51 user 0:10.06 sys 【追記】VirtualBox 3.0.12*1 AMD-V有効 0:57.61 real 0:15.73 user 0:36.71 sys…

ActiveSync

gotouさんとのやり取りで.NET Compact FrameworkやアプリのコピーでActiveSyncについての質問があったためこちらにまとめます。Windows Mobile端末には標準でActiveSyncがインストールされていますので、追加インストールする必要はありません。ActiveSyncな…

クロス開発環境構築

GdiumでOpenBSDの動作確認を行うため、カーネルをクロスビルドしました。最初は無難にOpenBSD上で行い、同じ動作を他のOSで再現するという手順を採りました。 OpenBSD(i386)上でOpenBSD(mips64el)カーネルとユーザーランドをクロスビルド Interix上でOpenBSD…