IT Junk Box
- March, 2009 -
2009.03.04(水)
■ objconv って何? [PC]
Agner Fog: Object file converter
ELF や COFF なんかの .o とか .obj のファイルを相互変換できるそうで、これから
試してみます。面白そうな。ソースの中にある build.sh というファイルを見るとほ
とんどコメントで、1行だけおまじないがありました。
> g++ -o objconv -O2 *.cpp
なんとも大胆な作りです。LLVM でこしらえてみました。
> llvm-g++ -o objconv -O2 *.cpp
で、FreeBSD の Hello, world! なんですが、JWasm 用に作ったものを
.386
.model flat
.code
_start:
push sizeof msg
push offset msg
push 1 ; stdout
mov eax, 4 ; sys_write
push 0 ; dummy argument
int 080h
xor eax, eax ; sys_exit
int 080h
.data
msg db 'Hello World !!', 0ah
end _start
MASM でアセンブルして、objconv で ELF にしてみたらあっさり動きました。
> wine ml -nologo -coff -c -Fohello.obj hello.asm
> objconv -felf32 hello.obj hello.o
> ld -s -o hello hello.o
> ./hello
Hello World !!
でも、COFF じゃなく OMF だと変換に失敗するなぁ。マニュアルを見ると 32bit の
OMF もサポートしてるみたいなんだけど、変換できない場合もあるようです。
■ LLVM Compiler 2.5 公開 [PC]
LLVM Compiler の新しいバージョンが、公開されたようです。 Windows 版は、Wine
だと動かないんだけど、何か見落としたのかな。
2009.03.06(金)
■ Open Watcom C/C++ と doscmd [FreeBSD] [DOS]
Open Watcom C/C++ でこしらえたものを doscmd で実行するとこんなエラーが出て
Unknown interrupt 21 function 63
Unknown interrupt 21 function 65
調べてみると DBCS ベクター情報の取得とか拡張国別情報の取得のコードがあるよう
です。Open Watcom C/C++ の作ったマップファイルにそれらしい __mbinit_ というの
があって Open Watcom C/C++ のソースを探してみると bld/clib/mbyte/c/mbinit.c と
いうファイルに int __mbinit( int codepage ) があって原因のコードがありました。
ファイルが大きいと思ったらこんなものまで付いてくるんですねぇ。
ってことで、doscmd のパッチをこしらえてみました。こちらに置いておきます。
[ 3月 7日追記]
doscmd のパッチを修正しました。Open Watcom C/C++ と違うパターンでもそれなり
のデータを返すようにしました。
2009.03.08(日)
■ nask のファイルを objconv で変換してみた [PC]
objconv というのは、 ELF や COFF なんかの .o とか .obj のファイルを相互変換
できるツールで、nask の COFF ファイルでも試してみました。
FreeBSD の Hello, world! なんですが、nask 用にこしらえたものを
[FORMAT "WCOFF"]
[INSTRSET "i386p"]
[OPTIMIZE 1]
[OPTION 1]
[BITS 32]
[FILE 'hellof.nask']
global _start
[SECTION .data]
ALIGNB 4
msg db 'Hello World !!', 0x0A
msglen equ $ - msg
[SECTION .text]
_start:
push msglen
push msg
push 1 ; stdout
mov eax, 4 ; sys_write
push 0 ; dummy argument
int 080h
xor eax, eax ; sys_exit
int 080h
NASKでアセンブルして、objconv で ELF にして
> nask hello.nask hello.obj
> objconv -felf32 hello.obj
> ld -s -o hello hello.o
起動したらすんなりと動きました。
> ./hello
Hello World !!
2009.03.10(火)
■ FreeBSD の Portsnap を使ってみた [FreeBSD]
FreeBSD ハンドブックの Ports Collection の利用に FreeBSD 6 になって追加され
た 「Portsnap を利用する方法」が、書かれていたので試してみました。
ハンドブックでは、ports の sysutils に含まれてるようになっていますが、最近の
リリースでは標準でインストールされています。/usr/sbin/portsnap というファイル
を見るとシェル・スクリプトでした。初回は、
# portsnap fetch
というおまじないでファイルを持ってきて
# portsnap extract
というおまじないでファイルを展開するようです。2回めからは、
# portsnap fetch update
だけでいいみたいです。今のところサーバーが海外にしかないようなので、転送量が
多いようだったらしばらく使わないかもしれません。1回めは、55MB でした。
本家の FreeBSD Handbook の方は、既に修正されてました。
■ 新しいブートローダーだとか [FreeBSD] [DragonFly BSD]
FreeBSD と DragonFly BSD 用の新しいブートローダーだそうで、First public test
って書いてるんで様子見した方がいいかも。
2009.03.11(水)
■ FASM のバージョンアップで -d オプションが無くなった [PC]
FASM で暫く前に追加になった -d オプションが、無くなったようです。
version 1.67.24 (Dec 03, 2007)
[+] Added "-d" option to allow predefining symbolic constants from command line.
最新のバージョンだと
version 1.67.35 (Mar 09, 2009)
[-] Some internal code size reductions.
[-] Discontinued "-d" switch implementation.
ということに。悲しぃ。
2009.03.13(金)
■ IronRuby だそうで [Ruby] [Windows]
丁稚な日々の using によると IronRuby も配布されてるようで、まだアルファ版の
ようですが、気の早い方はもう試してるんですねぇ。
ってことで、アルファ版を手に入れましたが、.NET な環境をどこに作ろうかな!?
■ JWasm が SourceForge.net のプロジェクトに [PC]
MASM32 のフォーラムを見ると japheth さんが、JWasm を SourceForge.net に移した
ようです。で、フォーラムのモデレータも辞めてしまったようです。
[03月17日追記]
でも、japheth さん、ここでフォーラムの運営をやってるなぁ。
2009.03.15(日)
■ 求めるもの違い [Python] [Ruby]
思っているよりもずっとずっと人生は短い。: Pythonな人とRubyな人の違い
両者は、どちらの方が良いか、みたいな話ではなく、あくまで適性というか、求めるもの、目指すところの違いの話で。たぶん二人とも同じ光景を見てるんだと思うのですが、私が「1.8.6もいいけど、やっぱり1.9.1もいいよね」と表現するところを、柴田さんなら「1.9.1もいいけど、やっぱり1.8.6もいいよね」と表現するんだろうなあ、と。でも、私の知っているRubyistなら、後者ではなく前者の表現を好みそうな気がするのです。同様に、Pythonな人の間では「2.6もいいけど、やっぱり3.0もいいよね」という言葉には、何かしら違和感を感じるのかもしれません。
そんな感じもするような。
■ マスメディアの世論誘導 [メディア] [世間]
植草一秀の『知られざる真実』: マスメディア総動員の情報操作・国策捜査との激闘
と、国策捜査で逮捕された植草氏にリンクしてみる。
大手マスコミは、国策捜査を垂れ流すばかりで郵政外資化の報道を流さないからなぁ。
酷いもんだ。世論誘導に乗せられやすい人は、ご注意を。
2009.03.16(月)
■ Debian 5.0 lenny をインストール [Linux]
■ DOS と Linux で Hello World! [DOS] [Linux]
Fun With Linux Assembly Language: dual.asm
こちらにある dual.asm というファイルをアセンブルすると DOS でも Linux でも
実行できるファイルを作ることができます。実際に試してみましたが、何も問題無く
動きました。また、ELF フォーマットは、 8番目のデータで OS を区別しています。
Linux の実行ファイルは 3 で FreeBSD だと 9 になっているので、少し書き換える
と他の OS でも動かせます。
Linux のばやい
0000-0000 7f 45 4c 46 01 01 01 03 00 00 00 00 00 00 00 00
FreeBSD のばやい
0000-0000 7f 45 4c 46 01 01 01 09 00 00 00 00 00 00 00 00
dual.asm を参考にしてマクロを作って幾つか ELF32 の実行ファイルを作ってみました
が、セクションが1つの場合しか正常な実行ファイルを作れないようです。
FASM でも試してみましたが、ELF32 の実行ファイルを作る場合、セクションを指定する
とエラーになって実行ファイルを作れませんでした。
2009.03.19(木)
■ ruby 1.9.1 を使って [ruby] [nDiary]
そろそろ、新しい ruby にも慣れとかないと浦島太郎になりそうなので練習を兼ねて
のとやさんの nDiary を ruby 1.9.1 で動くようにしてみました。といっても、PB memo
の Ruby 1.9.1 への移行挑戦の記録 を参考にさせてもらったのですが。
で、作業としては、ディレクトリー filter/, lib/, plugin/ にあるファイルの1行め
に euc-jp の magic comment を追加して
# -*- coding: euc-jp -*-
ndiary-lib.rb のファイルを変更して
246 行
変更前: require 'ftools'
変更後: require 'fileutils'
535 行
変更前: text.each("\n\n"){ |line|
変更後: text.split("\n\n").each { |line|
598 行
変更前: File::makedirs(File::dirname(filename))
変更後: FileUtils.mkdir_p(File.dirname(filename))
1行めに euc-jp の magic comment を追加したら動いてしまったような。
2009.03.20(金)
■ doscmd より Bochs や Qemu だそうで [FreeBSD] [DOS]
doscmd のパッチを本家に送ってみました。そしたら、「Bochs や Qemu を使った方
がいいよ。」とお返事がありました。う〜ん、シェルスクリプトで動かせるから使って
るんだけど。
このまま放置しておくと検索サービスで見つからないので、こちらにも書いておきまし
た。また、パッチのファイルに動作確認用の DOS のプログラムを追加しておきました。
2009.03.21(土)
■ シェバング (shebang) の違いだとか [FreeBSD] [Linux]
詳しいことは、68user さんの説明にお任せするとして、久し振りに Debian を使
ってるんですが、FreeBSD で使っていたスクリプトが、そのまま動かないという現実
に直面しています。まぁ、たいした数では、ないんですが。FreeBSD だと引数を渡す
のに env コマンドに -S オプションを使ったりしますが、
#!/usr/bin/env -S ruby19 -Ke
Linux だと、そんな使い方をしないってことで、env コマンドの代わりに使える exe
というツールも公開されてるようですが、数も少ないので必要に応じて書き換えよう
かと考えています。
で、改めてスクリプトを見直すとこんな1行めでも動いていたことに気付きました。
そうです、シェバング (#!) じゃなかったのにスクリプトが動いていたんです。
#/bin/sh
実は、この nDiary の変換と更新に使っていたスクリプトだったりします。
2009.03.28(土)
■ Tomahawk Desktop だとか [FreeBSD] [Linux]
gihyo.jp: FreeBSD Daily Topics: Tomahawk Desktop OS - FreeBSDベースへ転身
Tomahawk Computersが開発している『Tomahawk Desktop』がLinuxベース
からFreeBSDベースへ切り替わりました。
Linux のライセンスについては、こちらでも話題になってたような。
@IT: 「GPLはもう要らない」、OSSの伝道師が異説
dotCOMmie's Blog: Eric S. Raymond speaks heresy.
まぁ、それはともかくそろそろ PC-BSD を使ってもいい頃かも!?
2009.03.30(月)
■ JWasm で ELF32 の実行ファイルを [FreeBSD] [Linux]
JWasm のマクロのこと等で Japheth さんに連絡したら、気に入ってもらえたようで
本体の方で対応することになりそうです。ということで、次のバージョンが出るのは、
また先になってしまうなぁ。たははっ。
で、新しい JWasm v1.95pre 版なんですが、DOS のリアルモードで動くバージョンも
追加されてました。
フォーマットの資料を検索して調べるより Open Watcom に置いてある資料 を見た方が
早かったような。
2009.03.31(火)
■ ELF フォーマットの番号って? [FreeBSD] [NetBSD] [OpenBSD] [Linux]
FreeBSD の /usr/include/sys/elf_common.h を見ると下記のようになってます。
#define ELFOSABI_NONE 0 /* UNIX System V ABI */
#define ELFOSABI_HPUX 1 /* HP-UX operating system */
#define ELFOSABI_NETBSD 2 /* NetBSD */
#define ELFOSABI_LINUX 3 /* GNU/Linux */
#define ELFOSABI_HURD 4 /* GNU/Hurd */
#define ELFOSABI_86OPEN 5 /* 86Open common IA32 ABI */
#define ELFOSABI_SOLARIS 6 /* Solaris */
#define ELFOSABI_AIX 7 /* AIX */
#define ELFOSABI_IRIX 8 /* IRIX */
#define ELFOSABI_FREEBSD 9 /* FreeBSD */
#define ELFOSABI_TRU64 10 /* TRU64 UNIX */
#define ELFOSABI_MODESTO 11 /* Novell Modesto */
#define ELFOSABI_OPENBSD 12 /* OpenBSD */
#define ELFOSABI_OPENVMS 13 /* Open VMS */
#define ELFOSABI_NSK 14 /* HP Non-Stop Kernel */
#define ELFOSABI_ARM 97 /* ARM */
#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */
で、NetBSD とか OpenBSD のバイナリファイルを幾つか持ってきて調べてみると
0000-0000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
全部8番めのデータは、"00" でした。あれっ、何で?