- 作者: 川合秀実
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2006/03/01
- メディア: 単行本
- 購入: 36人 クリック: 735回
- この商品を含むブログ (299件) を見る
30日でできる!21日目はOSを守る。目的がなんだかわからなくなってきたが、要するにアプリケーションを呼び出した後にどのように処理をするか、ということなのだが、APIを処理するための割り込みを用意してそこをすべて通過させるようにする。
最初結構手こずったが、最終的にはちゃんと動かすことができた。
bim2hrbを使わない分、アセンブラを使うプログラムはHariMainラベルを追加したり、ちょっと改造する必要があるな。
hello2.hrb: hello2.nas nasm -felf32 $^ -o tmp.o -l $@.lst ld -m elf_i386 -e HariMain -n -Thrb.ld -static -o $@ tmp.o crack2.hrb: crack2.nas nasm -felf32 $^ -o tmp.o -l $^.lst ld -m elf_i386 -e HariMain -n -Thrb.ld -static -o $@ tmp.o
- hello2.nas
[BITS 32] GLOBAL HariMain HariMain: ; ラベルを挿入したり。 mov edx,2 mov ebx, msg int 0x40 mov edx, 4 int 0x40 msg: db "hello", 0
hrb.ld は以下のように設定した。
- hrb.ld
OUTPUT_FORMAT("binary"); SECTIONS { .head 0x0 : { LONG(49 * 64 * 1024) /* 0 : stack+.data+heap の大きさ(4KBの倍数) */ LONG(0x69726148) /* 4 : シグネチャ "Hari" */ LONG(0) /* 8 : mmarea の大きさ(4KBの倍数) */ LONG(0x310000) /* 12 : スタック初期値&.data転送先 */ LONG(SIZEOF(.data)) /* 16 : .dataサイズ */ LONG(LOADADDR(.data)) /* 20 : .dataの初期値列のファイル位置 */ LONG(0xE9000000) /* 24 : 0xE9000000 */ LONG(HariMain - 0x20) /* 28 : エントリアドレス - 0x20 */ LONG(0) /* 32 : heap領域(malloc領域)開始アドレス */ } .text : { *(.text) } .data 0x310000 : AT ( ADDR(.text) + SIZEOF(.text) ) { *(.data) *(.rodata*) *(.bss) } /DISCARD/ : { *(.eh_frame) } }