2009-01-01から1年間の記事一覧
セキュアソフトウェアを買って読書中なので,P147に載ってるスクリプトのLinux版を作って見ました. 誤用しやすい関数(strcpy,sprintfとか)を探すのに使うスクリプトです。 #!/bin/sh #set -x if [ $# != 3 ]; then echo "Usage: " $0 " [dir] [function lis…
この前のTD4エミュレータをgithubに置いてみますた。
expectコマンドなら入力を自動化できるので、それを使ってhackbenchを動かして終了するスクリプトを書いてみた。 expectのスクリプトはこんな感じで。 [masami@moonlight:~/kvm-img]% cat test.sh #!/usr/bin/expect -- set timeout 600 spawn kvm -hda lenn…
調べてたらいくつかのやり方が分かったのでメモ。接続したいlinux環境の設定としては、/etc/inittabに↓を書くのと、 T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100 ||<< grubでカーネルオプションを追加して置く。 >|| /boot/vmlinuz-2.6.32 root=/dev/h…
CPUの創りかたは前から持っていて、実際に作ってみたかったんだけど、 電子工作は得意ではないので、その前にエミュレータを書いてみた。 著者の方はエミュレータを公開してくれているけど、自分Windows持ってないので本で紹介されている画面とかから このエ…
0日目 Twitterで64itのLinuxでgccgoをビルドする方法を教えてもらいました。 ありがとう@apkerさん!! まずは、ビルドから。基本的にはSetting up and using gccgoにしたがえば良いんだけど、 その場合、multilibのビルドに失敗して上手く行かない場合があ…
読んだのはLWNの11/4版の記事のひとつ「Another null pointer exploit」。以下はtwitterにつぶやいたのを貼っつけただけだど・・・LWNの「Another null pointer exploit」はこっちと関連がある。 http://lwn.net/Articles/360329/当初は2.6.21カーネルのpipe…
55struct inode *ramfs_get_inode(struct super_block *sb, int mode, dev_t dev) 56{ 57 struct inode * inode = new_inode(sb); 58 new_inode()はスーパーブロック構造体を渡して、新しいinodeの領域を確保してくれる。 59 if (inode) { 60 inode->i_mode …
今までは有線LAN使ってたんだけど、そろそろ無線LAN使いたいなーと思ってルータ買ってきたわけですが・・・ 設定でハマったので今後のためにメモっとく。自分はノートPC2台持ってて、メインのマウスコンピュータで買ったノートPCとeecpc両方共sidを入れてま…
これってできたよなと思ったのでメモ。ちょっと使いたかったので・・・こんな感じで書いて・・。 #include <stdio.h> #define func_def(func_name, type, arg) \ void func_name(type arg) { \ printf("%s\n", arg); \ } #define test(nnn, type, arg) func_def(test </stdio.h>…
毎度ながら、minix2smpのソースはここ。 http://gsd.unex.es/projects/minixsmp/このソースではロックはlock_mp_kernel()、mp_switching_lock()、mp_heldq_lock ()などの関数がほぼ行っていて、 #smpの実装で追加された部分に関してはそうだと思う。 これら…
twitterの影響でplan9をインストールしてみたよ。 #ドロリッチは影響を受けなかったのに・・・最初に本家からCDイメージをダウンロード。 ちなみに、このイメージはライブCDとしても動くのです。次にqemuのディスクイメージ作成して、cdromから起動する [mas…
先週分のLWNを見ててpwrite()というシステムコールを見つけたので、 どんな動作なのか試してみた。 manはこちらに。 manを読むと、指定したオフセット位置から指定されたバイト数分データを書き込むけど、ファイルのオフセットは変更しないと書かれているの…
ramfs_fill_super()の実装を見ていく。 217static int ramfs_fill_super(struct super_block * sb, void * data, int silent) ||}< >|c| 224 save_mount_options(sb, data); 225 226 fsi = kzalloc(sizeof(struct ramfs_fs_info), GFP_KERNEL); 227 sb->s_fs…
ソースはlxrの2.6.31。まずは、初期化から。 295static int __init init_ramfs_fs(void) 296{ 297 return register_filesystem(&ramfs_fs_type); 298} init_ramfs_fs()は特別なことは一切しなくて、register_filesystem()をコールして、自分自身を登録する。…
brainf*ckの文法はウィキペディアにも書いてあるので、 インタープリタの実装自体は分かりやすいけど、実際に"A"を表示させる方法が分かりづらかったと。。"A"を表示するコード ++++++++[>++++++++<-]>+.ここで出てくる記号の意味を簡単に書くと、 :ポイン…
前回書いたとおり、MP Configuration tableは5種類あって、ENTRY TYPEと呼ばれるテーブルがあるので、それを見ていく。ENTRY TYPEの種類。 Entry Description Entry Type Code Processor 0 Bus 1 I/O APIC 2 I/O Interrupt Assignment 3 Local Interrupt Ass…
matsucon.netさんで配布されている、2chのMS-IME用(スタンダード変換辞書)をanthyで使いたかったので、MS-IME→Anthy辞書変換用のスクリプト書いてみますた。 言語はなんとなくcで書いてます。辞書の置き場は$HOME/.anthyです。。 このディレクトリってanth…
前回はMP Floating Pointer Structureを見て、その中にMP Configuration table Headerへのアドレスが入っていることを書いたので、 今回はMP Configuration table Headerを見ていく。見るといっても内容をすべて見るというよりは、minix2smp実装を理解するた…
一応まじめに働いてる気はする\(^o^)/2007年 ・日本科学技術連盟 第23年度(2007年度) ソフトウェア品質管理研究会 分科会成果報告 −論文:直交表とマインドマップを使った効果的なテスト設計 −リンク(pdf):http://www.juse.or.jp/software/pdf/23_sp…
MINIX2のsmp実装を見ていく上で出てくる用語の一つがfps。 仕様書だとfpsと略してないですが、smp実装のソースコードで使っているのでそれに合わせます。fpsとはMP Floating Pointer Structureの略で、以下の2つの情報を保持しているテーブル。 1.MP Configu…
こちらも基本的に詳細はコメントに書かれているのでわかりやすい! !*===========================================================================* !* trampoline_pm * !*===========================================================================*…
ap_main()はmp.cにいて、アセンブラで書かれた処理(_trampoline_pm)から呼ばれる。 void ap_main(void) { /* This is the main routine for AP's. This is the entry point before the CPU has been started and jumped to protected mode */ /* Tell BSP …
調べているのはここにあるソース。http://gsd.unex.es/projects/minixsmp/ソースにコメントがちゃんと書いてあるのでこれを読めば良いのでうれしい。 trampolineは4段階のステップで行われていますよ。 !*=================================================…
調べているのはここにあるソース。 http://gsd.unex.es/projects/minixsmp/こいつは直接使うというか、ラップ関数の中から使われる。 void phys_copy_dword (unsigned long source, unsigned long destination); 例えばこんな感じで・・ void LOCAL_APIC_WRI…
IPIの初期化が終わったらsend_startup_ipi()をコール。 引数のtrampoline_addrは初期化の時と同じくトランポリンのアドレス、2個目の引数はどのcpuをスタートさせるかを表す。 void send_startup_ipi(u32_t trampoline_addr, int which_cpu) { /* Send START…
fn+f1:サスペンドかハイバネート fn+f2:? fn+f3:? fn+f4:モニタの輝度− fn+f5:モニタの輝度+ fn+f6:ミュートのON/OFF切り替え fn+f7:音量− fn+f8:音量+ fn+f9:? fn+f10:? fn+f11:? fn+f12:?
調べているのはここにあるソース。 http://gsd.unex.es/projects/minixsmp/そんでは、関数を見ていくと、引数の1番目(trampoline_addr)はfind_trampoline()で見つけたトランポリンコードのアドレス。 まず分かるのはcmosのデータを読んだり、書いたりして…
まだ、enable_cpu()で必要な処理を実装しているだけでBSPしか見えてないです。 qemuの画面が小さいからアレですが、画面の上のほうにkprintf()でデバッグ用のメッセージ出力させてます。 ハックに使ってるminixのバージョンは3.1.0ですが、smp対応ということ…
調べているのはここにあるソース。 http://gsd.unex.es/projects/minixsmp/ u32_t find_trampoline(void) { /* Find a memory zone suitable for allocating trampoline code. It will be a 0's zone, suposing this is free. */ u32_t addr8; u32_t addr; u…