マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

2009-05-01から1ヶ月間の記事一覧

Minix本 第3版でてたのか

『オペレーティングシステム 第3版 設計と実装』って本。タイトルが少し違うから別物だと思ってたが。まぁ、第2版も中古で1500円だったから買ったわけで、第3版もそのままの値段だと厳しいな。ただ、買うのは第2版読んでからにしよう。そうしないと、読まな…

Minix本を買うことにした

『オペレーティングシステム―設計と理論およびMINIXによる実装』をAmazonで買うことにした。新品を買うと9240円もするけど、中古で1500円で売ってたのでそれを買うことにした。ただCDはついてこないらしい。まぁ、本に書いてあることを理解できれば、CDがな…

特定のホストまでのルータを表示してみる その2

前回の特定のホストまでのルータを表示してみるではICMPソケットの読み込みでブロッキングしてしまい返事が返ってこなかったときの処理ができなかったけど、今回はIO::selectを使うことで解決した。というか、forループで回してるところは、selectを使わない…

RubyでGoogle急上昇ワードを取得する

RubyでGoogle急上昇ワードを取得するに書いてあるスクリプトをいじってみた。REXMLに詳しいかはわからないけど、XPath大好きなので、XPathを使って書き直した。 require 'rexml/document' require 'net/http' url = 'www.google.co.jp' ret = Net::HTTP.star…

特定のホストまでのルータを表示してみる

今回は、tracerouteと同じような機能を持つscanrouteというプログラムを作ってみた。引数で渡されたホストまでのルータを表示する。Googleなんか指定すると結果が返ってくるのに、Yahooを指定すると途中で止まってしまう。何でだろう?原因不明。『基礎から…

Basic認証でどこかに接続してみる

WicketにはBase64のAPIがあるので、これをつかってBasic認証が必要などこかのサーバーに接続するプログラムを書いてみた。Basic認証はユーザー名とパスワードをコロンでつないで、それをBase64にしたものをHTTPヘッダに付加する。HTTPヘッダでは Authorizati…

著作権表示

今作っているOSの参考になったMona OSは、MITライセンスなので、著作権表示が必要だ。どう書けばよかったわからなかったので、ひげぽんさんに問い合わせたところ ・主要なソースの1つのコメントヘッダに mona/core/kernel/kernel.cpp の一番先頭にある /* */…

グラフィックカードを挿す

今までオンボードだったので、自作PCで初めてグラフィックカードを挿してみることにした。Windowsは問題なく動いてくれて、ドライバもインストールできた。しかし、LinuxではX Windowが立ち上がらないという問題が起きた。なので、一旦グラフィックカードを…

Raw Socketを使ってみる その6

ICMPの種類のいくつかに対応。対応してないICMPパケットが来ても落ちないようにした。ICMPのクラスを増やした割には、使ってるのは共通する部分だけだったり

Raw Socketを使ってみる その5

ICMP ECHOとICMP ECHOREPLYに対応。ICMPでそれ以外が来たら落ちる。次で対応するICMPのタイプを増やす

最近光化学スモッグ注意報がでるようになった

遠くから光化学スモッグ注意報のお知らせが聞こえてくる

Javaで世界一短いHello World!?

class A{public static void main(String[] a){assert a==null:"Hello world";}} 何かいろいろ表示されてしまうけどHello World!を表示できる。でもただ表示させるだけだったらjava 'Hello World!'とかでもいいかもしれない。何がしたいんだ俺

NullPointerException

今回のLOCK prefix unallowedの正体はJavaでいうNullPointerExceptionだった。NULLが代入された変数からメンバ関数を呼び出そうとしてた。なんてこった

LOCK prefix unallowed再び

またLOCK prefix unallowedというエラーがでた。qemuは相変わらず落ちてしまう。今度は何が原因だ?

動いた

どうやら、virtualを付けた関数に = 0を付けてないところがあったのが問題だったようだ。以下のようにしたら動いた。 virtual void hoge() = 0;

問題の部分 その2

_ZTV3Nicというラベル自体が見つからなかった。そりゃエラーでるな。どうしてラベルがないのかはわからないけど

問題の部分

昨日のエラーがでてたと思われる部分をg++で出力したgasから抽出した。movl $_ZTV3Nic+8, (%eax)ってところが怪しいのかな。+8って何を指してるのだろう? _ZN3NicC2Ev: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax movl $_ZTV3Nic+8, (%eax) popl %ebp …

undefined reference to vtable

コンパイルしてたらエラーが…、メッセージは↓の通り NE2000.o: In function `Nic::Nic()': NE2000.cpp:(.text._ZN3NicC2Ev[_ZN3NicC2Ev]+0x8): undefined reference to `vtable for Nic'Googleで検索してみると、virtual宣言した関数に処理を定義していない…

memcpy作り直し

memcpyをMOVSBを使って作り直した。MOVSBは[DS:ESI]にあるバイトを[DS:EDI]にコピーする命令。DF(ディレクションフラグ)の状態に応じてESIとEDIをインクリメントか、デクリメントする。今回はCLD命令でDFをクリアして、インクリメントさせている。そしてMOVS…

まだ甘かった

下のコード、3つめの引数に関わらず1byteコピーしちゃうね。1回はコピーが行われてしまうので先に条件分岐をしないといけないな

甘かった

どうやら、いろいろ甘かったようだ。h.d.kさんに教えてもらったことだけど、下のアセンブラはまずいらしい。DECはキャリーフラグを更新しないらしい(独習アセンブラにも書いてあった)。そしてJAはキャリーフラグをチェックしているらしい(これも独習アセンブ…

昨日書いたアセンブラ

CMPいらないんじゃないか?演算結果が0になればいいことだし memcpy: MOV EDI, [ESP + 4] MOV ESI, [ESP + 8] MOV ECX, [ESP + 12] memcpy_loop: MOV DL, [ESI] MOV [EDI], DL INC EDI INC ESI DEC ECX JA memcpy_loop RET

はてなハイクで☆をつけるスクリプト

はてなハイクで☆をつけるスクリプトをつけるスクリプトを作った。例としておはようキーワードの新着20件に対して☆を付けるスクリプトを書いた。パスワードは通常使ってるものではなくhttp://h.hatena.ne.jp/apiに書かれてるものを使うことに注意 #! /usr/bin…

アセンブラで書くことにした

memcpyをアセンブラで書くことにした memcpy: MOV EDI, [ESP + 4] MOV ESI, [ESP + 8] MOV ECX, [ESP + 12] memcpy_loop: MOV DL, [ESI] MOV [EDI], DL INC EDI INC ESI DEC ECX CMP ECX, 0 JA memcpy_loop RET これでいいんだろうか?アセンブラはよくわか…

memcpyを実装しようとしているのだが…

memcpyを実装しようとしているのだがinvalid conversion from ‘void*’ to ‘char*’とコンパイラに怒られてしまう。char*に変換できなければバイト単位のアクセスができないんじゃないか?どうすればいいんだろう?

Raw Socketのスクリプト更新

githubのsocket.rbをrecvfromを使ったものに置き換えた。パディングによるずれの問題も起こらないようなので良かった

recvfrom

readだと指定したバイトまで読み込んでいたけど、recvfromなら1フレーム毎に読み込んでくれたのでrecvfromを使うことにした。これなら、毎回フレームのサイズを気にしたり、パディングの問題を気にする必要もないので、楽ができる。最初からrecvformを使っ…

最近起きるの早いな

なんでだろう?とくに早く寝てるわけでもないし、意識してるわけでもないのに

作業が進まない

やる気が出ない。困ったな

githubに載せてみる

githubに自作OSのソースを載せてみた。結構パクリが多いけど