2010-02-01から1ヶ月間の記事一覧
rip/eipと同様にちょっとした手順が必要. #include <iostream> int main(int argc, char **argv) { unsigned long eflags = 0; __asm__ __volatile__ ("pushf\n\t" "popq %%rax\n\t" "movq %%rax, %0\n\t" :"=m"(eflags)); std::cout << "eflags is " << std::hex << </iostream>…
インラインアセンブラでmovqとかで直接読み出せないので,call命令を使う. 参考「OSDev.org」 #include <iostream> int main(int argc, char **argv) { unsigned long rip = 0; __asm__ __volatile__ ("call 1f\n\t" "1: pop %0;\n\t" :"=r"(rip)); std::cout << "rip</iostream>…
2010/02/18時点では,単に指定した位置を読み書きしてるだけで,実用性のあるコードにはなってないです>< ソースはgithubに.処理内容は読み込みとほぼ一緒で,論理セクタの設定方法は,あたりまえだけど,読み込み時とまったく一緒です. 読み込み時はコ…
ということで,自作カーネルもATAのPIOデータ転送(LBAとCHS)を使ってデータの読み込みが出きるようになりました(∩´∀`)∩ワーイソースはこちら http://github.com/masami256/miko 参考文献は「インターフェース増刊 ATA(IDE)/ATAPIの徹底研究」です. これ…
前のコードでバグってるところを見つけたので、修正版です. 全てのソースコードはgithubにあります.PCIのバス番号と、デバイス番号からPCIデバイスを探す関数. static u_int32_t find_pci_data(u_int8_t bus, u_int8_t dev) { u_int32_t data; u_int32_t s…
manによると,fd間でデータのコピーを行うけど,read()とwrite()が不要なので効率が良いとのこと.実際にやるとこんな感じになります.. [masami@moonlight:~]% touch a.txt b.txt [masami@moonlight:~]% echo "foobar" > a.txt [masami@moonlight:~]% emac…
PCIにアクセスするのにPCI BIOS使った方が良いのかな〜と思って,まずは,PCI BIOS32を探すコードを書いてみました. 参考文献は昨日買った「PCIバス&PCI‐Xバスの徹底研究」最初に探すのは,PCI BIOS32サービス・ディレクトリで,アドレス0xE0000〜0xFFFFFの…
昨日のoopsはこれです.まず,oopsにある原因のコードの場所を見ます. [12643.727359] RIP: 0010:[<ffffffffa02a00ae>] [<ffffffffa02a00ae>] count_free+0xae/0x131 [minix]そうすると,count_free()という関数で落ちていることがわかります. 後ろの0xaeはバグの場所で,0x131は関数のサイズで</ffffffffa02a00ae></ffffffffa02a00ae>…
ファイルシステム用のfuzzツール「fsfuzzer」にminixのファイルシステムをテストするコードを追加して,遊んでみました. このツールは,何年か前の,「Month of kernel Bugs」でも使われてたような気がします.fsfuzzの基本的な使い方は,以下の通りで単純…