ぺーじんぐ。

ちょっと調べた結果、CR0レジスタの31bit目がページング機能のトリガになっているらしい。そこで、Grubから私のコードに抜けた直後でCR0レジスタの31bit目を1にアサートしてみたところ、さすがにQemuがクラッシュした(wセグメントディスクリプタの設定を無視…

初期の目標は達成できたので...

「30日でできる!OS自作入門を Linux & GAS で行う」をやってみて、大雑把だが初期の「いかにしてx86マシンがブートし、プロテクトモードに移行するのか理解する」という目標は達成できた。そこで、OS自作本にのっとって作業するのを一時中断し、現在多くのO…

30日でできる!OS自作入門を Linux & GAS で行う (3日目)

さて、めっきり更新が遅くなってしまいましたが、3日目です。ポイントは いかにして32ビットプロテクトモードへ突入するか いかにしてCのソースが吐いたバイナリにjmpするか です。 いかにして32ビットプロテクトモードへ突入するか 32ビットプロテクトモー…

Rubyでインラインアセンブラできるようなクラスを作ってみた

界隈でRubyが遅いとか言われているので、「インラインアセンブリできれば超早くなるんじゃね?!」と思って、やってみた。ちなみに、Linux上じゃないと動かないよ!クラスファイルasm.rbのダウンロードはこちらから このファイルと同じフォルダに、以下のよ…

シンタックスハイライト時にコンソールっぽくなるようCSSをいじってみた

なんとなく、ソースコードはコンソールの中にあった方がしっくりくるので、CSSを変更してシンタックスハイライト時の色を変更して、コンソールっぽくしてみた。具体的には、シンタックスハイライトされている要素には、それぞれ 名前 クラス名 コメント synC…

newbusベースのデバイスドライバソースコードのスケルトン

FreeBSDのデバイスドライバ(?というか、どちらかというとカーネルモジュール)を書く機会があったのだけれど、資料が/usr/src/sys/dev 以下のソースコードくらいしかなくて、思いのほか苦戦してしまった。折角書いたので、スケルトンファイルとして公開してみ…

ネットワークアナライザ

ネットワークアナライザのWireSharkを導入して、遊んでみた。 これまでまともに使ったことのあるネットワークアナライザは、dummynet(これはどっちかっていうとネットワークエミュレータかなぁ),tcpdumpくらいなもんだったり。ちなみに、両方とも、ネットワ…

早速バグ修正

先日リリースしたmixi echo用プラグインですが、mixi_post_echoの方に「日本語がpostできない」というかーなーり!致命的なバグがあったので修正しました。lifehackintokyoさん、バグに気づかせてくれてありがとうございました。id:praggerさんには、こちら…

mixi echo 用 Pragger プラグインを作ってみた

「RubyやってるのにPraggerやってないなんてありえないよねー(笑)」で評判のPraggerですが、まだ触ったこともなかったので練習がてらmixiエコー(をget/にpost)するようなPraggerプラグインを作ってみた。コードを書くにあたっては、boumankan Pragger用プラ…

今日読んだもの

一昨日から、移動時間や暇な時間は全て[rakuten:book:11973734:title]につぎこんでいる感じ。なんか、(CやPascalといった)高級言語のソースを見る->アセンブルされたコードを見るの繰り返しが多いんだけど、最適化の度合いが一目瞭然で、非常に面白い。 つー…

Jruby on gcj

さっき、GCJ(GNUのJavaコンパイラ。.javaをCPUのネイティブコードに落とし込む。)の存在を知って、こんなんあるのかーとびっくりしていた。 そうえいば、Ruby界隈でJrubyなるものが話題になっているけれど、それをGCJ(GNUのJavaコンパイラ)でネイティブコー…

30日でできる!OS自作入門を Linux & GAS で行う (2日目)

というわけで、どうみても前の更新から5日以上たっているけれども2日目の説明を(笑 2日目で行うことは、 1日目で .byte、.word、.intでバイナリ直打ちしていた箇所をプログラムに置き換える リンカスクリプトを書く。 Makefileでアセンブルとディスクイメー…

明けまして

12月31日からOS自作本の3日目のソースファイルをGAS(Gnu Assembler)を用いて書いてやろうと試みていたけれど、ようやく32bit プロテクトモードに突入 && 32bitバイナリを動作確認したよ!なぜこんなに時間がかかっていたかというと、 GASで絶対ジャンプする…

gasと戦闘中

今、OS自作入門3日目のiplからOS本体に処理を移すところを書いているのだけれど、iplからOS本体に処理が移らない。具体的には、iplから0xc200番地によみこまれるはずのコードへジャンプしたいのだけれど、ジャンプ先のコードが読み込まれない。 [Using as:ti…

30日でできる!OS自作入門を Linux & GAS で行う (1日目)

gcc & as in Linux環境 で OS自作入門したい!と思ったので、そのために環境構築してみた。モチベーションとしては、 Linux のコンパイルは gcc で行われているから、gccで生成したバイナリをそのまま使えた方がlinuxも理解できるかも。 ブートローダをGASで…

PC起動直後のメモリマッピング part2

起動後のリアルモードのメモリ 0x7c00番地 - 0x7dff番地まではブートセクタ(HDDのシリンダ0、ヘッド0、セクタ0)がBIOSによって自動的に読み込まれる。とすると、ディスクイメージのシリンダ0、ヘッド0、セクタ0にプログラムのエントリポイントを配置するのが…

PC起動直後のメモリマッピング

Using ld (Gnu linker script のマニュアル) メモリマッピング自体は、普通に考えたらldでやるよなー。ただ、PCの起動直後はld自体もメモリに乗っていないわけで。まだちょっと混乱してるなぁ。

ipod touch 到着

サンプルコード付きのiPhone向け開発リファレンスまとめ ipod touch が届いたので、ネイティブアプリのためのまとめサイトをメモっておく。これにくわえて、公式サイトのドキュメントも見る必要ありだけど。 全然関係ないが、プログラムやっていると調べもの…

今日読んだものたち

プログラムはどう動くのか? 〜 ELFの黒魔術をかいまみるshell 上でelfバイナリで保存されているプログラムが実行されるまで。ローダが /etc/ld-xxx.so という形で共有ライブラリになっていたのがとても驚き&知ることができてうれしかった点。何度か読んで、…

BitVisor 0.7 Released

おー、ついに出ましたか! http://www.securevm.org/bitvisor-download.html#bitvisor-0.7後でLXRにコードくわせて解析しよっと!

日記

正直なところ リアルモード -> プロテクトモードの遷移を実際に体験してみたいのだけれど、Linuxは、起動して使えるようになった時点で既にプロテクトモードに遷移してしまっているので体験できない(当たり前だが)。CR0レジスタの0ビット目を立てるだけとは…

GASでhello,world

GAS(Gnu Assembler)でHello worldしてみる。以前のテストではgccを使っていたが、それはどことなく外道な感じがしたのでasだけで起動できるようにした(Thx,参考文献)。 .section .data message: .ascii "hello,gas!\n" .section .text .global _start _start…

Ubuntu 8.04 でカーネルコンパイルするとnvidiaのドライバがちゃんと読み込まれない

という問題で半月ほど悩んでいたのだけれど(その間ずっと超低解像度で動かし続けていた)、nvidia-new-source-envyを導入することで解決した。よーわからんけど、envyはカーネルのバージョンから勝手にドライバを選んでインストールしてくれるんだとか。あり…

PHPの開発環境

ふとしたきっかけでPHPをいじることになったので、開発環境をテストPCにインストールする。ちょっと前の本などを見ると、Apacheを入れてPHPのモジュールを使用するように設定して...という手順が書かれている。当然、Webページの書き換えを行うようなプログ…

Dell の激安サーバ

Dell PowerEdge T105が1万5000円。スペックとしては、 CPU:デュアルコア AMD Opteron(TM) プロセッサ 1212 (2.0GHz/2MB L2キャッシュ) Memory:2GB HDD:160GB オンライン限定76,320円 (税込)OFF!といった感じ。丁度CUI OnlyのUnix系サーバが欲しかったので…

初めて読むMASMはとっても良い本。

私の所属する研究室内では、Linuxカーネル読書会なるものをやっている。教材は詳解Linuxカーネルの第3版。この本は-読んでみると分かるが-x86依存の話が非常に多い。スケジューラの話のあたりになると、Gnu Assemblerなどという暗号(!)でガシガシ書いてあ…

gccでインラインアセンブリするときの記法

gccでインラインアセンブリ機能を利用しようとしたら、だいぶ記法が変態的(って言ったら怒られるかな^ー^;)だったのでメモ。 1 #include <stdio.h> 2 3 int main(int argc,char* argv[]){ 4 int a=10,b=0; 5 6 printf("before:%d\n",b); 7 8 //----memo---- 9 //通</stdio.h>…

ひとこと日記

I'm reading はじめて読むMASM―ソフトウェア環境のからくりを学ぶ to understand はじめて読む486―32ビットコンピュータをやさしく語る.はじめて読む486―32ビットコンピュータをやさしく語る seems to be nice book, but it doesn't have the explanation of…

新規ページ作成時のテンプレートの変更

Pukiwikiの新規ページ作成時に、デフォルトで読み込まれるテンプレートページをオリジナルのものに変更しようとしたら意外と手こずったのでメモ。仮に、Pukiwikiの「新規」ボタンを押したら、templateというページが入力フォームに読み込まれるように設定し…

manコマンドの実行結果をひらすら英語で読む

というのが、自分にとって一石二鳥な感じがする。私は実質4月からLinuxの勉強を始めたに等しいので、知らないコマンドが非常にたくさんある。そこで使うのがmanコマンドなわけだけれど、多くは分かりやすい英語で書いてあるのでこれは読むのに適しているので…