udis86を使ってディスクイメージのMBRをディスアセンブル

多分objdumpとか他のツール使っても出来ると思うけど、udis86に付属のudcliでもこんな感じに簡単にディスアセンブル出来る。 $ udcli -16 -att -v intel -o 7c00 -c 512 freebsd.img 0000000000007c00 eb3c jmp 0x7c3e 0000000000007c02 0000 add %al, (%bx,…

UEFIのSDK事情

なんか幾つか選択肢があって混乱したので、今理解していることをメモっとく。 EDK II このへん。 オープンソースで開発されてるUEFIのSDKで、UEFIのSDKまわりをググってると一番よく出てくるやつ。 つかいかたはこのへんとか。…なんだが、ソースの取得方法に…

UEFIアプリケーションの開発を始めるのに役立ちそうな記事リンク集

Mac上のVMware FusionやVirtualBoxでUEFI 2.0を試す - かーねる・う゛いえむにっき BIOSとUEFIの歴史 - かーねる・う゛いえむにっき GPTとMBRはどのように違うのか? - かーねる・う゛いえむにっき UEFIのSDK事情 - かーねる・う゛いえむにっき Linuxホスト…

アドレスからソースコードの位置を探すコマンド

カーネル飛んだ時とか、RIP(EIP)からobjdump -d vmlinuxを見ながら位置を探したりしてたんだけれども、binutilsに含まれてるaddr2line使えばソースコードの行数簡単に見れたのね。まぁ、これがあるからといってobjdumpでディスアセンブルさせて眺めたいケ…

シンボリックリンクをrm -rf symlink/すると不幸になる

OS

Twitterでちょっと話題にしたのでメモしとく。 sh-3.2$ mkdir -p hoge/huga sh-3.2$ touch hoge/huga/piyo sh-3.2$ ln -sf hoge tmp sh-3.2$ rm -rfv tmp tmp sh-3.2$ ls -l hoge/huga/piyo -rw-r--r-- 1 syuu staff 0 1 22 14:25 hoge/huga/piyo シンボリッ…

UEFIハマりポイント

UEFI環境でFreeBSDとLinux・Windowsなどのデュアルブート環境を構築するとMBRを使うことになるが、ここで誤って(というかMBR的には正しいが)MBR上のパーティーション(タイプがGPTのやつ)にブートフラグを立てると途端にUEFIでGPTパーティーションが認識…

Ubuntu 12.10のGRUB2でデフォルトカーネルを変更するにはどうしたらいいの?

GRUB1なら良く知ってるんだけど、GRUB2って勉強不足で未だによく分からないのよね。 で、デフォルトカーネルを変えようとした訳だが、最近のUbuntuの/boot/grub/grub.cfgってサブメニューがあって、そこにカーネルの候補が入ってる形になってる。 grub.cfgか…

USB 3.0 HDD benchmark on FreeBSD-CURRENT

なんかASUS U24Eを買ったらUSB 3.0ポートが付いてきて、FreeBSD-CURRENTで認識出来たのでUSB 3.0対応ケースを買って2.5 inch SATA HDDを突っ込んで軽く試してみた。 USB 2.0のポート root@u24e:~ # usbconfig list ugen0.1: <EHCI root HUB Intel> at usbus0, cfg=0 md=HOST spd=H</ehci>…

kexecの実装

ユーザランドのkexecコマンドへ再起動後のカーネルを渡します。ELFパーサとかbzImageカーネルイメージパーサとか種類あるみたいだけど、それらがカーネルのレイアウト読み取って解釈を行なって、最終的にイメージとメモリレイアウトをシステムコール経由でカ…

Linux loader for BHyVe

なんかBIOS emulationなかなか動かないし、取り敢えずLinux loader欲しいよね。という気持ちが高まりつつある今日この頃、皆様如何お過ごしでしょうか。で、作ってみるならなるべく既存のプログラムを流用して楽にやりたいわけだが、bhyveloadに一番似てるLi…

BHyVe treeのgit mirroringはじめました。

取り敢えず、BHyVe treeが-CURRENTへマージされるまでは残しときますね。 https://github.com/syuu1228/bhyve

GPTとMBRはどのように違うのか?

UEFI環境下では、BIOSでサポートされているMBRに代わりGPTと呼ばれる新しいパーティーションテーブルを用います。 2TB以上の大容量なHDDをサポート出来る、と説明される事が多いのですが、具体的にどのような違いがあるのか比較してみます。 MBR MBRはLBA 0…

BIOSとUEFIの歴史

BIOSの歴史 BIOSはIBM PC(1981年)と共に登場し、「IBM PC互換機」が普及した事によりパソコンの標準ファームウェアとなりました。 以降、ハードウェアもBIOS自身も当時とは全く異なる姿になるまで大きく拡張・変更され続けていますが、アプリケーション互…

Mac上のVMware FusionやVirtualBoxでUEFI 2.0を試す

Macばっかり使ってるとUEFI 2.0で遊ぶ機会が無く、いつまでも使い方が分からないままな訳ですが、最近のVMwareやVirtualBoxならUEFI 2.0をサポートしているので仮想マシン上で取り敢えず試してみる事が可能です。 VMware Fusionの場合 なんか適当にUbuntu Se…

VMware Fusion 5のvmware-vdiskmanagerは何処

ここ。 $ find /Applications/VMware\ Fusion.app -name vmware-vdiskmanager /Applications/VMware Fusion.app/Contents/Library/vmware-vdiskmanager 古いブログを参照したら/Library/Application Support/VMware Fusion/vmware-vdiskmanagerって書いてあ…

Instruction level tracer作った

VT-xなVMMはエミュレータと違って1命令毎にソフトウェアエミュレーションしている訳では無いので、単純に命令エミュレーションごとにデコード結果をprintfすればいいとかいう簡単な解は無いし、1命令実行ごとにVMExitする為の設定とかいうものも存在していな…

MacOS Xでアプリケーションを複数インスタンス立ち上げる

Mac

MacOS Xのアプリって基本的に/Applications/Hoge.appを何度も開いても関連付けられたファイルを何個開いても1インスタンスしか実行されない。それでいい場合がほとんどだとは思うんだけれど、Preview.appでPDFの資料眺めててふと複数ウインドウで違うページ…

Linuxでnetperfとかで負荷かけてる時に/proc/statとかを記録してグラフ化するツールあったらいいなと思ったので作った、という話

netperfで負荷かけている時にカーネルのstatistics情報取って色々とグラフ作るツールがあったらいいなぁ、と思ったので作った。今のところperf statで取れるようなCPUのキャッシュの情報とかが取れてないが…とりあえず netperfとかやってる間にログに数値を…

Building BHyVe Guest kernel HOWTO

This is supplemental document of Building BHyVe HOWTO. build guest kernel and install guest kernel. cd /root/bhyve make buildkernel KERNCONF=BHYVE make installkernel KERNCONF=BHYVE DESTDIR=/root/bhyve-guest-1gb-v2

BHyVeに新しい仮想デバイスを追加してみる

BHyVe Hackathon用にサンプルの仮想デバイスを書いてみた。 実行イメージ bhyve-tap0# cat /dev/bvtest Hello from BHyVe 仕組み inl(BVTEST_LEN_PORT)で文字列の長さを取得 outl(BVTEST_OFF_PORT, offset)で読み取りたい1文字のオフセットを設定 inl(BVTES…

Arch Linuxで/usr/src/linux;make installで自動的にinitramfs作ってgrub設定する

あおたくんの記事と同じような話だが、Arch Linuxには/sbin/installkernelが無いので作ってみる。 で、ググるとこのあたりにそれっぽいものがあるんだが、これinitramfs作ってくれなかったので、作ってくれるようにちょっと改良した。このあたりから取れます…

GSoC 2012 week8: doscmdというDOSエミュレータをBIOSエミュレーションライブラリに仕立て上げる

DOSアプリを動かすためのエミュレータという事で当然BIOSエミュレーションも入っているので、これをアプリケーションの形からばらしてライブラリに作り変えてる。 DOS関連の機能は要らないから削ったり。 まずは、int13h(ディスクアクセス)をエミュレーシ…

GSoC 2012 week7:この辺りのBIOSコールを実装した

int=10h Screen ah=0eh Write Character in TTY Mode int=13h Disk ah=00h Reset Disk Drives ah=02h Read Sectors ah=08h Get Drive Parameters ah=41h Extended Disk Drive (EDD) Installation Check ah=42h Extended Read Sectors int 16h Keyboard ah=00…

何故かホストが凍るようになった

ちょっとINT 13h AH=02h(Disk Read)のリクエストをダンプして眺めてみたいって思って、こんなStubを作って試してみたら… static int int13_handler(struct vmctx *ctx, int vcpu, int intno) { uint64_t rax, rbx, rcx, rdx, es_base, rflags; uint32_t es_l…

INT 10h AH=0Eh(VGAへの文字出力)のエミュレーション

まずはコンソール出力が無いと始まらないので、INT 10hから手を付ける事にした。 と言っても、結構色々な機能があるので、まずはFreeBSDのMBRで使われているAH=0Ehだけサポートしてみる。fbsdrun.c vmexit_hypercall(struct vmctx *ctx, struct vm_exit *vme…

VMCALLからの復帰

こんなコードをusr.sbin/bhyve/fbsdrun.cへ足してみる: @@ -463,9 +463,10 @@ intr = (rip - 0x400) / 0x4; printf("intr=%"PRIu64"\n", intr); - return (VMEXIT_ABORT); - - return (VMEXIT_RESTART); + if (intr == 0x14) + return (VMEXIT_ABORT); + el…

GSoC 2012 week6:INT命令をハンドルしてみる

まずブートセクタをゲスト空間に読み込めるようにする。bhyvebiosload.c disk_fd = open(disk_image, O_RDONLY); if (read(disk_fd, &membase[0x7c00], 512) != 512) { perror("read "); return (1); } これに合わせて、ゲストのRIPは0x7c00から開始するよう…

GSoC 2012 week4&5:week3のバグを直して擬似BIOS動くようにした

これが動いていなかったので、直した。IntelのマニュアルのVol3・section 9.1.1 "Processor State After Reset"とsection 26.3 ”CHECKING AND LOADING GUEST STATE”を読みながら、VMCSの初期値のつじつま合わせを。 int vm_setup_bios_registers(struct vmct…

Linux Kernelでイベントトレースしてみる

sched:sched_migrate_taskイベントにフィルタルール「comm==bash」を適用、トレースを有効化してtrace_pipeから標準出力にトレース結果を出力 cd /sys/kernel/debug/tracing/events/sched/sched_migrate_task echo "comm==bash" > filter echo 1 > enable cat…

Building BHyVe HOWTO

Caution What I describing in this text is not so different with FreeBSD official manual, if you haven't read official manual you should read it first. Here's the link: 23.6. Rebuilding World Install FreeBSD 9.0/amd64. We won't use src or p…