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

脆弱性を作り易い関数を調べるスクリプトを書いてみた.

セキュアソフトウェアを買って読書中なので,P147に載ってるスクリプトのLinux版を作って見ました. 誤用しやすい関数(strcpy,sprintfとか)を探すのに使うスクリプトです。 #!/bin/sh #set -x if [ $# != 3 ]; then echo "Usage: " $0 " [dir] [function lis…

githubにソースを置いてみた。

この前のTD4エミュレータをgithubに置いてみますた。

シリアル接続とexpectコマンドで、処理の自動化。

expectコマンドなら入力を自動化できるので、それを使ってhackbenchを動かして終了するスクリプトを書いてみた。 expectのスクリプトはこんな感じで。 [masami@moonlight:~/kvm-img]% cat test.sh #!/usr/bin/expect -- set timeout 600 spawn kvm -hda lenn…

qemuでシリアル接続

調べてたらいくつかのやり方が分かったのでメモ。接続したいlinux環境の設定としては、/etc/inittabに↓を書くのと、 T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100 ||<< grubでカーネルオプションを追加して置く。 >|| /boot/vmlinuz-2.6.32 root=/dev/h…

TD4のエミュレータを書いてみた。

CPUの創りかたは前から持っていて、実際に作ってみたかったんだけど、 電子工作は得意ではないので、その前にエミュレータを書いてみた。 著者の方はエミュレータを公開してくれているけど、自分Windows持ってないので本で紹介されている画面とかから このエ…

Goのmainが呼ばれるまでの道のり0日目と1日目

Go

0日目 Twitterで64itのLinuxでgccgoをビルドする方法を教えてもらいました。 ありがとう@apkerさん!! まずは、ビルドから。基本的にはSetting up and using gccgoにしたがえば良いんだけど、 その場合、multilibのビルドに失敗して上手く行かない場合があ…

LWN読んだまとめ

読んだのはLWNの11/4版の記事のひとつ「Another null pointer exploit」。以下はtwitterにつぶやいたのを貼っつけただけだど・・・LWNの「Another null pointer exploit」はこっちと関連がある。 http://lwn.net/Articles/360329/当初は2.6.21カーネルのpipe…

久々にramfsを読んでみる

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 …

Debianで無線LANでハマったのでめも。

今までは有線LAN使ってたんだけど、そろそろ無線LAN使いたいなーと思ってルータ買ってきたわけですが・・・ 設定でハマったので今後のためにメモっとく。自分はノートPC2台持ってて、メインのマウスコンピュータで買ったノートPCとeecpc両方共sidを入れてま…

cのプリプロセッサの##演算子使って関数定義。

これってできたよなと思ったのでメモ。ちょっと使いたかったので・・・こんな感じで書いて・・。 #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>…

minix smpのロック実装

毎度ながら、minix2smpのソースはここ。 http://gsd.unex.es/projects/minixsmp/このソースではロックはlock_mp_kernel()、mp_switching_lock()、mp_heldq_lock ()などの関数がほぼ行っていて、 #smpの実装で追加された部分に関してはそうだと思う。 これら…

plan9をインストールしてみた\(^o^)/

twitterの影響でplan9をインストールしてみたよ。 #ドロリッチは影響を受けなかったのに・・・最初に本家からCDイメージをダウンロード。 ちなみに、このイメージはライブCDとしても動くのです。次にqemuのディスクイメージ作成して、cdromから起動する [mas…

pwrite(2)を試してみた

先週分のLWNを見ててpwrite()というシステムコールを見つけたので、 どんな動作なのか試してみた。 manはこちらに。 manを読むと、指定したオフセット位置から指定されたバイト数分データを書き込むけど、ファイルのオフセットは変更しないと書かれているの…

ramfsを読んでみる2

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…

ramfsを読んでみる。

ソースは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のコードの意味がやっと分かったのでメモ。

brainf*ckの文法はウィキペディアにも書いてあるので、 インタープリタの実装自体は分かりやすいけど、実際に"A"を表示させる方法が分かりづらかったと。。"A"を表示するコード ++++++++[>++++++++<-]>+.ここで出てくる記号の意味を簡単に書くと、 :ポイン…

MP Configuration Table Entriesの内容

前回書いたとおり、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…

2ch顔文字辞書をanthyの辞書に追加

matsucon.netさんで配布されている、2chのMS-IME用(スタンダード変換辞書)をanthyで使いたかったので、MS-IME→Anthy辞書変換用のスクリプト書いてみますた。 言語はなんとなくcで書いてます。辞書の置き場は$HOME/.anthyです。。 このディレクトリってanth…

MP Configuration table Headerの仕組み

x86

前回は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…

MP Floating Pointer Structureを調べる

x86

MINIX2のsmp実装を見ていく上で出てくる用語の一つがfps。 仕様書だとfpsと略してないですが、smp実装のソースコードで使っているのでそれに合わせます。fpsとはMP Floating Pointer Structureの略で、以下の2つの情報を保持しているテーブル。 1.MP Configu…

_trampoline_pmの中身。

こちらも基本的に詳細はコメントに書かれているのでわかりやすい! !*===========================================================================* !* trampoline_pm * !*===========================================================================*…

ap_main()を読む

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 …

tramoplineの本体をみてく。

調べているのはここにあるソース。http://gsd.unex.es/projects/minixsmp/ソースにコメントがちゃんと書いてあるのでこれを読めば良いのでうれしい。 trampolineは4段階のステップで行われていますよ。 !*=================================================…

trampolineを見る前に、気分を変えて普段よくでてくる関数でも見るよ。

調べているのはここにあるソース。 http://gsd.unex.es/projects/minixsmp/こいつは直接使うというか、ラップ関数の中から使われる。 void phys_copy_dword (unsigned long source, unsigned long destination); 例えばこんな感じで・・ void LOCAL_APIC_WRI…

mp_start()もそろそろ大詰め。

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:?

send_init_ipi()は名前からしてIPI(Interpurocessor Interrupts)を初期化する関数。

調べているのはここにあるソース。 http://gsd.unex.es/projects/minixsmp/そんでは、関数を見ていくと、引数の1番目(trampoline_addr)はfind_trampoline()で見つけたトランポリンコードのアドレス。 まず分かるのはcmosのデータを読んだり、書いたりして…

minix2のsmp実装をminix3に移植してみるテスト。

まだ、enable_cpu()で必要な処理を実装しているだけでBSPしか見えてないです。 qemuの画面が小さいからアレですが、画面の上のほうにkprintf()でデバッグ用のメッセージ出力させてます。 ハックに使ってるminixのバージョンは3.1.0ですが、smp対応ということ…

次はfind_trampoline()。

調べているのはここにあるソース。 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…