お前ら*BSDのカーネルをハックしますか?
これからsys/kern/init_main.c読んでみます。 【参考】 ・「The Design and Implementation of the 4.4BSD Operating System」 の第2章 http://www.freebsd.org/doc/en_US.ISO8859-1/books/design-44bsd/index.html ・*BSDでのアセンブリ http://www.int80h.org/bsdasm/ なんか検索してみてもあんまりハックサイトひっかからないね。 Linuxより伝統あるはずなのに。
UDPのudp_inputにおいて ユニキャストとマルチキャスト・ブロードキャストで 処理が分かれいるところで、ユニキャストの方は分かるのですが、 マルチキャスト・ブロードキャストの方でUDPPCBをfor文でスキャンして いくのはなぜですか? 同じPCBは複数存在するのですか? >>224 ブロードキャストの方はaliasついてりゃ、それぞれ同じポートつかえる。 マルチキャストは良くわからない。 >>227 もしよろしければブロードキャストにおける同じポートを使える クライアントサーバのプログラムをいただけないでしょうか? >ブロードキャストの方はaliasついてりゃ これ嘘。複数使えるけどブロードキャスト宛を受信できなかった。 ↓ブロードキャストアドレス宛は受信できるけど、ユニキャストアドレス宛は受信できない。 foreach (リモートアドレス) { udpソケット作る。 SO_REUSEADDRする。 ローカルアドレスとしてブロードキャストアドレスにbindする。 リモートアドレスにコネクトする。 } FreeBSD4.7のカーネル内の関数についてお聞きしたいんですが、 timeout(ftn, arg, to_ticks) timeout_t *ftn; void *arg; register int to_ticks; において ftnの引数の数を任意の数にしたいのですが やり方がわかりません。どなたか教えてください。よろしくお願いします。 マルチuzeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee!!!!!!!!!!!!!!!!!!!!!!!!! >>232 できませんが、構造体を定義して、それを確保してポインタで渡すというのは だめですか。こんな感じ struct example_arg { int arg1; char *arg2; }; void example_ftn(void *arg) { struct example_arg *ea = arg; /*Some useful stuff*/ } ついに キタ━━━━━━( )(゚ )(∀゚ )(゚∀゚)( ゚∀)( ゚)( )━━━━━━ !!!!! 【4.4BSDの設計と実装】 アスキー ISBN: 4-7561-4346-6 価格: \5,800 発売日: 2003/9/18 >>237 おお、とうとう出るのか。 ソースが見たいな。 おまえら、洩れが書いたカーネルをハックしてどうするつもり??? みのるの超流行語では、 流行語大将になりそうな言葉を紹介していきたいと思います(^‥^)。 オヒャヒャ 僕、みのる様が使用している笑い方です。 (^‥^) 僕、みのる様が愛用している顔文字です。 トライブット 僕、みのる様のサイトがある所の偉い所の人。 みのる様ファン倶楽部 会員数がもう100億人超えた超えてます。 マヨネーズ 僕様の大好きなマヨネーズの一種です スペシャルギニア 世界共通語で、誰でも分かります 応援ありがとう!!! 皆が僕様を応援してくれるから、僕様も返信します 俺様の素晴らしいサイト↓ http://minoru_god.tripod.co.jp/ UNIX板のバカドモはこっちに来て勉強しな BYE みのる様 訳が糞だって聞いたけど、そのへんも直して出るのかね? >>222 禿同 話は変わるけど、携帯ゲーム機"プレイステーションポータブル(PSP) 久夛良木氏は,“PSPはゲーム業界が待ち望んだ究極の携帯機”として説明。「ここまでやるかと言われるスペックを投入した」という。 発表によれば「PSP」は,曲面描画エンジン機能を有し,3Dグラフィックでゲームが楽しめる。 7.1chによるサラウンド,E3での発表以来,クリエイターたちにリクエストが高かった無線LANも搭載(802.11)。 MPEG-4(ACV)による美しい動画も楽しめるという。これによりゲーム以外の映画などでのニーズも期待する。 外部端子で将来,GPSやデジタルチューナーにも接続したいとする。 また,久夛良木氏は,繰り返し「コピープロテクトがしっかりしていること」と力説。会場に集まった開発者たちにアピールしていた。 さらに,ボタン設定なども明らかにされ,PS同様「○△□×」ボタン,R1・L1,アナログスティックが採用される。 この際、スク・エニもGBAからPSPに乗り換えたらどうでしょう。スク・エニの場合、PSPの方が実力を出しやすいような気がするんですが。 任天堂が携帯ゲーム機で圧倒的なシェアをもってるなら、スク・エニがそれを崩してみるのもおもしろいですし。かつて、PS人気の引き金となったFF7のように。 突然変なこと言い出してスマソ・・ GBAと比較してみてどうですかね?(シェアの事は抜きで) カーネルソースをいじって printfでパラメータを表示しながら 状況を把握したいんですが、typescriptもパイプでファイルに 保存することもできないのですが、カーネルをイジっているひとは どうやってプログラミングしてるんですか? カーネルを扱うに当たって便利なやり方や、アプリケーションがあれば教えてください。 最近だとsimokawaさん謹製dconsって奴があるね。 特定のメモリに書いておいてIEEE1394 OHCI ホストコントローラが勝手にDMAしにくるってやつ。 シリアルコンソールはシリアルコンソールでも IEEE1394シリアルだから速い。 別に機器を買う必要があるということですか。 kgdbはカーネルのコンパイル時にしか使えないのですか? なんとかgdbなどのデバッグツールでカーネル関数の動きを追っていきたいのですが。。。 よろしくお願いします。 >>254 ( ´д)ヒソ(´д`)ヒソ(д` ) 知らなかったよ。kgdbを使ってカーネルのコンパイルができるのか..... >>254 通常のgdbのように扱えるよ gdbのカーネルモードだからね 基本的に大きな違いはないはず。ただ、カーネルをデバッグしているから 端末が二つあった方がいいね もし一台でデバッグできる方法があったら教えてくれ。 誰も自分の死体を見ることはできないというお話ですた。 死体は見れるよ。来世で。 できないのは、自分自身の解剖。 いや、自分の癌の摘出をやった外科医はいたし、ある程度は可能だろう 最近のはやりだとbochsやvmwareなどの仮想マシン上でデバッグする という手もあるな。bochsにも一応デバッグ支援のための機能はある ようだ。もっともエミュレーションに起因する問題が出る可能性は あってどんな場合でも使えるわけじゃない。 動きを追うぐらいならそこそこ使えるかもね。 ま、詰めなきゃならん所は昔ながらのメモリ上に値を置く、かな。 *BSDで、一台でもある程度はできるよ。Linuxでも最近できるかな。 options DDBを入れてCtl-Alt-Breakを押すと ddbのモードに入る。ここで、命令ごとのステップ実行 callの終了までの実行、シンボルで指定できるブレークポイント設定 変数参照、レジスタ参照、等々。ddb(8)は印刷しといたほうがいいな。 i heard that you can use /dev/kmem, instead of /var/crash/vmcore.*, fore core-file argument of kgdb, though i've never tried. just fyi. カーネルモジュールはどうやってデバッグするんでしょうか? 特にインターフェース部分。 デバッグ用のシンボルはどうやっていれれば? >>1 これは実際に重要なことである。 開いたソースはあなたのためになり私のためになり、可能性をもたらす。 多くの危惧の中の一つは、しばしば現実となるが、世界の協力はそれを直すだろう。 もしあなたやあなたの友人が開いたソースを悪意で使うなら、それは停止して欲しい。 BSDのソース読んでみようと思うんだけど、NetBSDがいいかな? (´-`).。oO(でっかい釣り針がぶら下がっております…) 漏れじゃネーよ(w カーネルくらい黙って読むし でもって、NetBSDをちらっと読んでるんだけど、なんか得体の知れない マクロだらけ…。ちゃんとヘッダファイルから読まなきゃダメか。 あと、NetBSDのカーネルハック本(和訳)って全然出てないよね? おおまかな構造を理解してからソース読まないとサッパリだよ。 この前出た4.4BSD赤本じゃあ古すぎるような気がするので読んで ないけど… >>274 今までどんなの読んでたの? 得体の知れないマクロってのはbus_spaceとかの事かな。 NetBSD のカーネルハック本(和訳)って、 BSD Magazine の Vol.13 のことじゃないのか? /usr/includeの下は丸暗記するぐらいの勢いで読みまくった。 これはいきなりカーネル読み始めるよりも、効率的だし、 実用的だったよ。 へたれプログラマなんですが、なんでそんなにヘッダファイルが重要なのか わからないんですが、理由を教えていただけませんか? >>280 これは計算機科学の教科書の練習問題だと思うぞ。 こんなものかな。採点キボンヌ(配点20点) ヘッダファイルにはデータ構造、関数定義など、モジュール間のインターフェイスと なるものが記述されており実装の詳細を見ずに全体を把握する事が可能である。 また、一つのプロジェクト内のモジュールのインターフェイスというだけでなく、 異なるシステムとの間の相互運用性を確保するためにも必要である。 ↑ 俺の採点だと20点満点。素直に。 敢えてアラ探しやればできるだろが、練習問題という設定なら十分な回答だろ。 2ch的でない(奇をてらわない保守的な)回答だけど、そういう地味さにも好感。 >>281 ありがとうございます。 なんか目から鱗でした。 そうか、ヘッダファイルってそんなに重要なんだ…。言われて みればたしかに。 漏れも>>279 みたいに凄い勢いでヘッダ読んでみまつ。勉強に なったサンクスコ。 重要は重要だけど、本で言えば目次だけ読むようなもんだから 偏食にならないようにネ >>280 頭(head)だからです。 頭だけとか体だけとかは駄目なんです。 sys/kernel.h -- #defineSYSINIT(uniquifier, subsystem, order, func, ident)\ C_SYSINIT(uniquifier, subsystem, order,\ (sysinit_cfunc_t)(sysinit_nfunc_t)func, (void *)(ident)) funcを2重にキャストする意味って何? BSDがSCOによって血祭りにあげられるまであと何日ですか? というか既に血まみれで死にそうなSCOが あちこちに血しぶきを撒き散らして嫌がらせしてるんだろ。 >>290-291 おまいら何もわかってないな 技術泥棒なんだよ ギ ジ ュ ツ ド ロ ボ ウ わかるか? >>292 煽り乙。どうせなら犬板のSCOスレ逝った方が人多くて楽しいと思われ BSDのカーネル読むにはどのBSDのソースがとっつきやすいですか? ソースなんて綺麗とか汚いとかほざくまえに、 動いてるコードなんだから黙って読むんだよ! 今じゃろくなコード書けない人間までコードが 云々なんて言い出す始末だからな。もうブチキレですよ。 カーネルによって違うのかもしれませんが、 各種スレッドというのは、スタックセグメントだけを スレッドごとに固有にもち、それ以外のセグメントは プロセス内の全てのスレッドで共有するという感じなのでしょうか? そうすると、ページディレクトリテーブルも共有で、 スタックセグメントだけを仮想メモリの機能として 別々の物理ページに割り当てるといった感じになっているのでしょうか? それとも全てのスレッドに対してCR3を割り当てるのかな? どうもプロセス内のスレッドとVMの関係がよく分りません。 >>298 実装にもよるんだろうけど、スタックも含め、スレッドがいくつあろうと アドレス空間は1プロセスで同じもの。スタックはスレッド毎に 切り替えて違うアドレスを指してあるだけ。 >>298 コンテクストスイッチ発生させると、プロセスのコンテクストスイッチと 変わらんし...それじゃあ、スレッドの意味がない... >>297 逆だよ。ろくにコード組めないから、綺麗なコード読みたいんだよ。 まぁ清濁併せ呑む度量があれば一番なんだが、そんな人間は黙って 読んでるよ。 >>303 あ、それ書いてたの、おれっちです。 最近NetBSDも忙しくて触って無いからカーネルファックもご無沙汰です。 厨房でもカーネルぐらい気合で理解できること証明したかったけど、 自分にはちょっと厳しかったです。また再開したときはよろしくです。 バッファをたくさんとれるようにカーネルイジってたら、 All mbuf clusters exhausted, please see tuning(7). と出るんですが、クラスタ数を多く割り当てたり、 別の目的で利用されている、クラスタを借りたりすることはできないでしょうか? a.具体的に何をしていたのかを書いてみよう。 (たとえばkern.ipc.nmbclustersをほにゃららにしてみたとか options NMBCLUSTERS = ほげ したら config におこられるとか) b.もし、具体的な目的があるのであればそれも書いてみよう。 (たとえば 負荷が高いWebサーバーをなんとかしたいとか。) あと環境もちゃんと書いてみよう。 一度の関数呼び出しで何回もパケットを 送出しようとするときインタフェースカードで データパケットが落とされることってありますか?? もし落とされたときは、ip_outputの返値は返ってきますか? また、それは「0」以外の値ですか? ループバック関数で戻ってきたパケットは欠如していません。 別のマシンでキャプチャーすると欠落しています。 原因・対策などありましたら、お願いします。 >>308 当然あるだろ。ip_output は if_output 呼んでるだけだから、 あとはネットワークインターフェイス依存。 etherなら、netinet/ip_output.c、net/if_ethersubr.c、 と追いかけていって、NICのデバドラまで読んでけ。 まぁ単に送信バッファ溢れてるだけだろうがな。 >>309 なるほど。。。参考になりました。 しかし、送信バッファがあふれても ip_outputの返値が0になるというのは問題なのでは?? ソケットバッファの場合はちゃんと制御できるのに。。。 >>310 ぜんぜん問題じゃない。君の考え方のほうが問題。 ソケットは到達保証するが、IPは到達保証しない。 まだわからない? >>311 ソケットが送信保証をするためには、ip_outputの返値が0である必要があるし、 ip_outputの返値で0を返すためには、ether_outputの返値が0である必要がある。 ちなみに、ネットワークに出力されたあとは、ソケットも到達保証しないよ。 仮にできるのなら、何も苦労しない。。。 PF_ROUTEソケットについて調べてるんですがどうもいまいち… (いまいちなのはもちろん自分) 4.4BSDの本見てから、ソース見たけど????です PF_ROUTEソケットを調べだしたのは。rtadvdで受けている メッセージを見ていたところ、ioctl()などのリクエストでkernelから生成してるはずの メッセージ数と合わない、こんなところからです。 http://orange.kame.net/dev/cvsweb.cgi/kame/kame/kame/rtadvd/rtadvd.c?rev=1.88 socket(PF_ROUTE, SOCK_RAW, 0)) やはりRAWだから一気に生成したメッセージはどこかで落されてしまうんですかね…。 落される場所がわからない… できれば落さないように改造してみたいんですが… 二年半前のスレか・・・ 見習いデーモンは一人前になったのだろうか。 >>1 の参考 ...半分ぐらい読むには読んだけど、むつかし。 ので、いったん撤退して、こっち↓に着手。 Commentary on the Sixth Edition UNIX Operating System tp://www.lemis.com/grog/Documentation/Lions/ そのうちリベンジの予定。 >>317 よし!俺が今から 「The Design and Implementation of the 4.4BSD Operating System」 を読んで>>317 を追い抜いてやるぜ!! しかし、"こっち"も... -- m40.s -- / initialize systems segments mov $KISA0,r0 mov $KISD0,r1 mov $200,r4 clr r2 mov $6,r3 1: mov r2,(r0)+ mov $77406,(r1)+ / 4k rw add r4,r2 sob r3,1b ~~ 0619: KISA0 and KISD0 are the high core addresses of the rst pair of kernel mode segmentation registers. The first six kernel descriptor registers are initialised to 077406, which is the description of a full size, 4K word, read/write segment. The first six kernel address registers are initialised to 0, 0200, 0400, 0600, 01000 and 01200 respectively. ~~ sob Subtract one from the designated register. If the result is not zero, branch back "offset" words; ... ... スタック --interrupted routine-- ps : old PS pc : old PC --vector-- r0 : old r0 --trap(assembler version)-- nps: new PS after trap r1 : old r1 sp : old SP for previous mode dev: masked new PS tpc return address in "call" --csv--- old r5 <- r5 old r4 old r3 old r2 cret <- sp r5r5r5r5r5 r5<-r5<-r5<-r5<-r5<-r5 うーん... service routine(dev, sp, r1, nps, r0, pc, ps) { u.u_ar0 = &r0 なんとも... read.cgi ver 08.0u [upliftProject] - 2023/07/09 Walang Kapalit ★ | uplift ★ 5ちゃんねる