☆Linux カーネルの仕組みを勉強するスレ☆
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001login:Penguin
01/10/02 17:44ID:38KkZsUQカーネル全般について語り合うスレッドです。
0803login:Penguin
03/11/26 22:35ID:OO1sXefqshared libのロード位置はmm_struct追えばとれると思うけど、
やったことがないので、今一つ自信ない。
ld-linux.soから情報を渡してもらうのが一番確実だろうねえ。
0804login:Penguin
03/12/02 02:21ID:Bf62dDgdありがとうございます.
current->mm->mmap->vm_start,vm_endを使えば,検査したリターンアドレスが動的にリンクされたライブラリのテキストセグメントに収まっているかどうか確認できそうです.
mmapで確保されるメモリリージョンが共有ライブラリのテキストセグメントかどうかはvm_flagsメンバが読みとり・実行可能かつ書き込み不可・プライベートなマッピングであるかどうかで識別するつもりです.
0805login:Penguin
03/12/05 23:56ID:JanVmuB0休眠状態のプロセスの.textや.dataを読み出そうとしています。
実行中のプロセスであればts->mm->start_dataをget_user()でいけるのですが、
休眠中なのでうまくいかないのです。(tsはプロセスディスクリプタへのポインタのつもり)
adr=ts->mm->start_data;
として
ladr=pte_offset(pmd_offset(pgd_offset(ts->mm,adr),adr),adr);
で得られたladrからget_user()すればいいと思ったのですが0読み出す値は0ばかりです。
何が悪いのでしょうか?
0806login:Penguin
03/12/07 13:04ID:8ZucmNpSget_user()ってカレントプロセスを前提にしてなかったっけ?
手抜きな回答ですまぬが、
kernel/ptrace.cのaccess_process_vm()を参考にするよろし。
もっと言えば、デバッガがptrace経由でどうやって他のプロセスの
メモリをアクセスしているか見てください。
0807login:Penguin
03/12/09 00:36ID:S+QZ9CO5ありがとうございます。
とりあえず、ptrace_readdata()の動作を見てみようと思い、モジュールをでっち上げてみました。
しかしinsmod時にptrace_readdataのシンボル解決が出来ないと怒られます。
ちなみにptrace_readdataの行のみをコメントアウトするとinsmod/rmmodが成功します。
includeしてるのはlinux/sched.hとlinux/mm.hです。カーネルを作るときのオプションか何でしょうか?
ところで皆さんはモジュールをいじるような時は何を参考にしています?
やっぱりオライリーの2冊(詳解カーネルとデバドラ)?
ひたすらgrep?
0808login:Penguin
03/12/09 00:47ID:KPHKA0UxEXPORT_SYMBOLされてないsymbolはモジュールからは見えないですよ
0809login:Penguin
03/12/09 01:20ID:S+QZ9CO5ぐぐってみました。
ビンゴのようです。
kernel/ptrace.hにEXPORT_SYMBOL(ptrace_readdata);という記述を加えてカーネルを再構築してみます。
08101
03/12/17 15:08ID:krVj3++U0811login:Penguin
03/12/18 00:07ID:oQuTHDGhどうしても、コンパイルがうまく行きません。
どなたか、ご教授よろしくお願い致します。
TargetはSH4、Hostは、Linux7.2に組み込Linuxをインストールしてあります。
クロスコンパイル等の環境構築は終わっており、組み込みLinuxのカーネルコンパイルも
コンパイルも無事通ります。それなのに、ドライバをコンパイルすると次の
ようなエラーが出てしまいます。
{standard input}: Assembler messages:
{standard input}:4144: Error: unknown opcode
{standard input}:4235: Error: unknown opcode
{standard input}:5719: Error: unknown opcode
{standard input}:6018: Error: unknown opcode
{standard input}:6295: Error: unknown opcode
{standard input}:6693: Error: unknown opcode
{standard input}:6780: Error: unknown opcode
{standard input}:7053: Error: unknown opcode
{standard input}:7085: Error: unknown opcode
{standard input}:7103: Error: unknown opcode
{standard input}:7239: Error: unknown opcode
{standard input}:7725: Error: unknown opcode
{standard input}:8404: Error: unknown opcode
make: *** [linux_ud/sylx.o] Error 1
もちろん、ネットで検索はしました。
gcc,nm,ar,as,g++,gdb,ld,objcopy,objdump等に問題があるのでしょうか?
よろしくお願い致します。
0812login:Penguin
03/12/18 00:09ID:MBnnQKSz0813login:Penguin
03/12/18 00:13ID:3f1SJdSQsylxがナニモノかしらんが、インラインアセンブラでも使ってるんでねーの?
ソース見せれ。
0814login:Penguin
03/12/18 00:19ID:hosf0Cpdhttp://pc.2ch.net/test/read.cgi/linux/1063594836/130
0815login:Penguin
03/12/18 00:57ID:wHzkPy4DLinux7.2てのはRedHatLinux7.2って事?
この手の問題だったらホストとターゲットのカーネルのバージョンを明らかにすべき。
あとはgcc,binutils,newlib,glibcあたりも。
ドライバを作るってのは
make modules
ってやった時?それともどっかから落としてきたソースをコンパイルしてるの?
MakefileのCCをbfdnameにした?
情報不足で状況が掴めないです。
0816login:Penguin
03/12/18 01:02ID:lp9NfDxYマルチにレスすんな
0817login:Penguin
03/12/18 01:11ID:wHzkPy4D組み込みスレにもマルチしてますね。
ただ、このスレにはお世話になった(なってる)ので、ついレスしてしまいました。
大局的に見るとやっぱりスルーすべきなんでしょうか・・・
0818login:Penguin
03/12/20 23:51ID:p8OBVrj+カーネル詳説では全然解説してないし。
例えば Netfilter を読むとっかかりになるようなサイトとか。
NIC ドライバは作った事あるんですが、ドライバより上位の層について
知りたいです。
0819login:Penguin
03/12/21 16:07ID:1QwJVAKL冗談抜きでソースじゃないか?
0820login:Penguin
03/12/21 16:12ID:u/cH/qKM両方の条件を満たしそうなのは http;//lxr.linux.no/source/ とか?
0821login:Penguin
03/12/21 18:51ID:1QwJVAKLhttp://lxr.linux.no/source/ か!
ナイス屁理屈
0822818
03/12/21 20:42ID:R8FN9n5Sしれないですが・・・(あるいはいまさら TCP/IP の解説でもないだろって事かも)
がんばって読んでみます
0823login:Penguin
03/12/21 21:11ID:1QwJVAKLリチャードさんの本を読破しよう
0824login:Penguin
03/12/22 18:23ID:jTZcEXDh>>823の言うように"Guru of the Unix gurus"であるStevens先生の本を読むべき。
0825login:Penguin
03/12/23 00:32ID:J48VmNLA出力するデータがもし4kBを越える場合,どのようにコーディングすればいいのでしょうか?
本を読んだり,ソースコードを眺めたりしたんですが,いまいちよく分かりませんでした.
proc_file_readを読むと,越えていても最後まで出力してくれそうな感じですが・・
どうかよろしくお願いします.
0826825
03/12/23 00:39ID:J48VmNLA「コーディング」というのはread_procの所です.
というか,proc_file_readでwhileループしているので,read_procではcount以下の読み込みを実装するだけでいいのでしょうか?
0827login:Penguin
03/12/23 20:48ID:k2EKtndjどっちかってゆーと、各プロトコルの実装の説明でなく、sk_buff の
各フィールドの使われ方とか Netfilter とかみたいな割とジェネリックな部分の
説明があればな、と。贅沢いってスンマソン
>>826
proc_file_read を読んだんだったら、それを信じて書けば動くよ。変な挙動だけど。
うろ覚えなので間違ってるかもだけど、普通に off を見て返す内容を決めても
いいっぽいんだけど、proc だとサイズベースで考えるのは面倒だから、
「何回目の呼び出しか」 を off で判断できるようにしてるっぽい。
*start に 1 を入れとくと、次は off が +1 されて呼ばれる (実際に返したバイト数
増えるのではなく) ので、こっちは off を見て返す内容を決めれば良い、と。
一回に返すサイズは count 以内にしておく事、と。
(実際には多少溢れても OK だけど、将来どうなるかわからんし)
多分そんな感じ。色々試せばわかると思う。 というか俺も proc_file_read() を見て
そう思ったから、正式な手順ではないかもしれないけど。
0828login:Penguin
03/12/23 22:40ID:uwJyCcqDkcoreあたりをパクるとか。
>>827
オライリーのカーネル本は?
skbのあたりは書いてあったはず。netfilterは無かったかも。
0829login:Penguin
03/12/23 23:15ID:k2EKtndjカーネル本はほとんどネット周りは書いてなくて、
ドライバ本は skb については 「ドライバ作者が見るべき所」 だけだから・・・
skb のフィールドって意外と増えたり減ったりしてるみたいだから
やっぱ自分で読むしかないんだろうとは思ってるんですけど。
ちなみに kcore は普通の read_proc の作り方とはちょっと違いますよ。
とはいえ、単にメモリのある領域をダンプしたいだけならあっちの方が楽そうです。
でもそれならキャラデバ書いたほうが楽かも?
0830login:Penguin
03/12/24 03:43ID:CT6SNhsXありがとうございました.色々試してみます.
0831login:Penguin
03/12/30 00:01ID:j3HEXdDL0832ヽ(´ー`)ノ
03/12/30 22:27ID:w1ByrpYn付属のドキュメントじゃダメなん?
Documentation/* とか、{menu,x,g}config の時み見れるヘルプとか。
0833login:Penguin
03/12/31 00:05ID:4ZezigAR本であれば以下はどうか
Linuxカーネル設定ガイド
ttp://www.amazon.co.jp/exec/obidos/ASIN/4798100889
0834login:Penguin
03/12/31 09:04ID:CE2m/NA+ヨゴシの本なんか誰が買うか
0835login:Penguin
04/01/07 01:47ID:EmIK8cJsそもそも、仮想メモリ空間にマッピングされる領域には、
どのような領域があり、かつ、その領域の見積方法は
どうするのでしょうか?以下の領域を推測しています。
・OSカーネル
・ドライバ
・プログラムソース
・スタック
・ヒープ
この他にも、I/Oバッファや共有メモリ, ディスクキャッ
シュなども入るのでしょうか?
また、作成したプログラムのソースコード部分の領域の
大きさの見積方法はあるのでしょうか?(例えばC言語)
以上、よろしくお願いします。
0836login:Penguin
04/01/07 22:21ID:x+u/tPyi分からん用語は使わずに何が知りたいかをくだ質スレに書け。
0837煽りイカ
04/01/11 21:46ID:PPiKfNSH始めたんですが、既にインクジェットのカートリッジを10個以上消費
しています。この戦いはいつまで続くんでしょうか?
プリントアウトした紙は、片っ端から製本業者に出しているので、
この出費もばかになりません。
0838login:Penguin
04/01/11 22:09ID:26nuhaia本当に紙のものが欲しいなら、すでに印刷して製本したものが書店で売ってあ
るから買えばいいですよ。でも紙で読むのはつらい。
lxr等のツールを使って眺めるとか--これも自前でやらなくてもlxrのサイトに
lxrかけたソースがおいてあるからwebブラウザで眺める--か、make tags(もし
くはTAGS)してviなりemacsで読むのがいいと思いますよ。
概要をつかむなら、まずディレクトリの構造を適当にながめたあと(or眺めつ
つ) init/main.c の start_kernel() から読み始めるのがいいと思います。
大変だけど、続ければ必ず読めるし、得るものは大きいから、がんばって。
0839login:Penguin
04/01/12 17:15ID:lpS+N9kGマジレスカヨ
0840login:Penguin
04/01/13 01:07ID:odyLziqAたとえば echo $SHLVL と打ちますと 2 とでたり
bash bashと続けて打てば 4となります
0841login:Penguin
04/01/13 07:19ID:yowy6EM0# そのさい誘導されたことを付記してください。でないとマルチ呼ばわりされそう。
0842login:Penguin
04/01/15 19:55ID:q7MiFnSU1:
カーネル側からroot権限であるデーモンプログラムかどうかのフックをする際に,
root権限である && setsidで制御端末から独立するのでcurrent->tty==NULL
という以外に条件はないでしょうか?
この条件だけだと端末からemacsを起動したときや,
デーモンプログラムから呼び出されたと思われるrmやchownなどもフックしてしまうようです.
2:
プロセスからあるデータへの参照をカウントしています.
その参照はコマンド名で対応づけられています.
カウント数が2の場合に,ps | grep [コマンド名]すると1つしかありません.
ん?と思って参照しているプロセスのコマンドラインをみてみると
(参照しているプロセスのpidは分かっています),
-:0
と表示されています.
これは一体どういう意味でしょうか?
pstreeコマンドでは「-:0」がちゃんとしたコマンド名で2つ表示されていました.
ちなみにそのコマンド名はwdm.binです.
よろしくお願いします.
0843842
04/01/15 19:57ID:q7MiFnSU0844login:Penguin
04/01/15 22:13ID:mabMTQF9親がinitかどうか確認するとか。
daemon(3)使っていればinitが里親になるはず。
0845login:Penguin
04/01/16 02:09ID:c7u8nyNCありがとうございます.
initにゾンビの始末をさせていたんでしたね.忘れてました.
emacsの方はsetsidを使って(emacsからforkしてemacsserverが実行されるまでの間),
しかもバックグラウンドで実行した場合initが親になるので無理なようです.
0846842
04/01/17 17:37ID:KaSlkRb2psでは通常,コマンド名の表示に/proc/cmdlineを参照します.
ただし,-cオプション(本当のコマンド名を表示する)をつけたときはcurrent->commを参照するようです.
で,proc_pid_cmdlineやexecve周りを眺めたましたが,上書きされる様子がない.
manで調べてみるとどうやらsetproctitleという関数を使ってコマンドラインの上書きが可能なようです.
引数として渡す文字列の先頭に「-」をつけると,- は無視され,フォーマット後の文字列がそのままセットされるようで・・
けれども,今の自分の環境のglibcではsetproctitleに関する記述はないのが変だなと思いますが.
特にこれ以上突っ込んでも自分の実装と関係ないので,放っておくことにします.
0847login:Penguin
04/01/18 02:11ID:+zT3hNOG・CPUにタイマ割り込みがかかる
・割り込みハンドラに処理が移る
・プログラムカウンタをそのプロセスのカーネルスタックにpush
・汎用レジスタの内容をプロセスディスクリプタのthreadに保存
・schedule()で次に処理するプロセス選択
・次に処理するプロセスのプロセスディスクリプタのthreadから汎用レジスタにロード
・次に処理するプロセスのカーネルスタックからPCにpop
・ジャンプ
という理解でいいのでしょうか?(自主的にCPUを放す場合は別として)
ということは、ほかのプロセスのカーネルスタックの一番上の中身を書き換えると、
違うところから実行が再開される?
0848login:Penguin
04/01/18 14:35ID:EgN885Nx> ということは、ほかのプロセスのカーネルスタックの一番上の中身を書き換えると、
> 違うところから実行が再開される?
signalの挙動がそうです。
0849login:Penguin
04/01/23 09:07ID:R+JbGtscおお〜!なるほど
0850login:Penguin
04/01/25 16:35ID:8CJ3FK3qライセンスはGPLに従うと思うのですが,基本的には拡張するカーネルのバージョン
についているCOPYINGをそのまま持ってきてREADMEか何かで
「このソフトウェアはGPLでライセンスされています.詳しくはCOPYINGを読んでください」
と書くだけでよいのでしょうか?
0851login:Penguin
04/01/25 19:58ID:B5VoqxYAGPL の最後読んだ?
0852login:Penguin
04/01/25 21:16ID:STnhf9z3すいません.今読みました.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
これをソースコードの冒頭につければいいんですね.
で「a copy of the GNU General Public License」がCOPYINGファイルになると思うのですが,
Linuxカーネルの方はCOPYINGのGPLの記述の最初にLinusさんの注意書きのようなものが付いていますよね?
このCOPYINGをそのまま使っていいんでしょうか?
0853login:Penguin
04/02/03 12:14ID:w95WYYei現在サーバを起動しているとメモリをどんどん減っていくという問題で困っています。
(もちろんfreeコマンドでキャッシュを差し引いたところを見ています)
メモリが圧迫された状況でも、topコマンドから消費メモリ順に並べても、
特にメモリを食っているプロセスはありません。
気になるのはゾンビプロセスが発生していることです。
>>842-845 にあるように
ゾンビは最終的にはinitに吸収されると思うのですが、
その際psやtopで見たinitの使用メモリは増大していくのでしょうか?
原因を特定できずに困っています。
現在は毎日再起動してなんとか運用中です。
0854login:Penguin
04/02/03 12:55ID:5ayoX5Ueゾンビを生んでる人を見つけて退治する。
毎日核落としてたんじゃバタリアンの中の人もかわいそう。
0855login:Penguin
04/02/03 13:05ID:dnjnuywSそのゾンビプロセスが何のプロセスかわからないと何とも言えない
0856login:Penguin
04/02/03 15:54ID:w95WYYeipostfix->local(Postfixのローカル配送プロセス)->procmail->bashスクリプト
と起動されており、
procmailから下がゾンビになってます。
まずはこのゾンビがメモリ圧迫の原因かどうか確かめたいのです。
ちなみにinitのメモリ使用量は増加してません。
純粋に空きメモリだけが減っていきます。
このようにゾンビが起きることでメモリを減らすということはあり得るのでしょうか?
もしあり得るとしたら、ローカルユーザは簡単にサーバを落とせてしまうことになってしまいませんか?
0857login:Penguin
04/02/03 16:14ID:5ayoX5Ueじゃあprocmailを殺す
ありうるし落とせるよ
だから殺す
0858login:Penguin
04/02/03 17:29ID:qJjZfJxc>>842-845は孤児の話だ。
親が骨を拾ってあげないからゾンビになる。
ということで親ごと殺さないとダメかも。
と書いていて思ったが、現実世界に当てはめたらとんでもねー表現だな。
0859login:Penguin
04/02/03 18:31ID:bGaWcOzSその親には問題がありそうだね。
0860login:Penguin
04/02/03 18:42ID:u8zu6V/Iちゃんと面倒見ない親を探して対処しないとな。
ていうか、孤児はinitが引き取るから、
引き取った後ならいい人のinitを殺す話になってしまう(藁
0861login:Penguin
04/02/03 20:59ID:NOAqHG+Fメモリはあまり食わないはず。
だいたいpsで見れば分かるじゃん。
0862853
04/02/03 21:22ID:w95WYYeipsで見るとこんな感じになってます。
926 16119 0.0 0.0 0 0 ? Z 22:24 0:00 [sed <defunct>]
しかしいつまでもゾンビが残るわけではなく、
ちょっと立つと自然に消えていきます。
自然に消えるゾンビなら気にしなくても良いのでしょうか?
それともゾンビが出ること自体がまずいのでしょうか?
0863login:Penguin
04/02/03 21:35ID:iQ6XyeXR親の顔が見たい。
0864login:Penguin
04/02/03 21:59ID:qJjZfJxc消えるなら、親の面倒見が悪いだけだろう。
気にするな。
0865login:Penguin
04/02/03 22:07ID:5ayoX5Ue死んだら出席簿から名前が消されるのに
ゾンビちゃんは出席簿に名前が残ったままだよ。
机は持ってかれるかもしれないけどさ。
0866login:Penguin
04/02/09 23:34ID:APi7kHwb関数を使ってみましたが、insmod で組み込むと
hook_uname.o: unresolved symbol open
hook_uname.o: unresolved symbol close
hook_uname.o: unresolved symbol write
とエラーになってしまいます。
でもstrncpyみたいなライブラリが必要そうな関数は問題なく
試用できるのがよくわかりません。
適切な資料がわからずみようみまねで書いているのですが、
LKMから呼び出せる関数のリストのようなものはありませんか?
またはこれらopenなどの関数を呼び出すためのコンパイル
オプションなどがありますか?
現状、次の記事を参考にプログラムを組んでいます。
http://www.atmarkit.co.jp/fsecurity/rensai/rootkit03/rootkit02.html
記事の書いてあるところまでは、そのままやってうまくいきました。
この hook_uname.c を改造しています。
linuxのkernelバージョンは 2.4.19です。
0867login:Penguin
04/02/10 00:13ID:0xm4A1oM標準ライブラリは使えまへん。
strncpyは親切な人が同じものを用意してくれているから。
モジュールから呼べるのはEXPORT_SYMBOLで宣言されてる。
まじめにやるなら馬本嫁。
0868866
04/02/10 01:48ID:LKCK7qEyEXPORT_SYMBOLでgrepしてみたら、i386_ksyms.cに記述されているのを
見つけました。
strncpyなどは、特別にここで用意されていたに過ぎないのですね。
馬本は、オライリーの「LINUXデバイスドライバ 第2版」のことでいいですか?
ちょっと高いですが買って勉強します。
0869login:Penguin
04/02/11 22:12ID:A4Mg4/pdライブラリ関数の使えないカーネル内でもシステムコールは使えますよ.
_syscall0とかのマクロを使うか,sys_openなど直接呼び出したりはできると思います.
0870login:Penguin
04/02/12 13:38ID:8sD0wTgvsyscallマクロは、システムコールに再入してまうのであまりよろしくありまへん。
カーネルスレッド使えば問題ないけど。
そもそも、モジュールの中でファイル開いてごりごりやるのはどうかと思いますな。
0871login:Penguin
04/02/15 18:11ID:UtEM83ENrootkitのwebページを参照にしているようでしたので,「どうかと思う」ことを敢えてやりたいのかなと.
>>866
カーネル内でファイル入出力をするなら,sys_acct辺りが参考になるんじゃないでしょうか.
0872866
04/02/19 04:01ID:3kajdZP1とりあえずいろいろ試してみましたので経過報告です。
(1) _syscall2マクロを使ってみました。
こんな感じでいのでしょうか。
_syscall2( int , open , const char *,pathname, int ,flags);
コンパイルすると次のようなエラーになるので、
(上記のマクロは24行目にあります。)
$ gcc -c hook_uname.c
hook_uname.c: In function `open':
hook_uname.c:24: `errno' undeclared (first use in this function)
hook_uname.c:24: (Each undeclared identifier is reported only once
hook_uname.c:24: for each function it appears in.)
errno.hをインクルードしてみましたが、
#include <errno.h>
モジュールを組み込むにエラーになってしまいました。
#insmod -f hook_uname.o
hook_uname.o: unresolved symbol errno
(続く)
0873866
04/02/19 04:01ID:3kajdZP1fd = func_sys_open("/tmp/hook_uname.txt",O_APPEND | O_CREAT );
コンパイルは成功しましたが、モジュールを組み込むにエラーにになってしまいました。
#insmod -f hook_uname.o
hook_uname.o: unresolved symbol sys_open
(3) sys_call_tableのアドレスを呼び出してみました
int (*func_sys_open)(const char *pathname, int flags);
func_sys_open = sys_call_table[SYS_open];
fd = func_sys_open("/tmp/hook_uname.txt",O_APPEND | O_CREAT );
コンパイル、insmodとも成功しましたが、実行すると
func_sys_openの呼び出し中に失敗し -9 が返ってきました。
やっぱりカーネル内からの呼び出しはだめですか。
とりあえずファイル操作をやってみているのは、分かりやすい結果が得られた方が
面白いかなというのが主な理由でした。
また linux-users MLの話題で、unlink をフックしてその中で、ファイルのバック
アップをとりたいという話題([linux-users:101834])があり、面白そうなテーマだと
思って手を出してみました。
sys_acct(の実装?)等参考に調べてみます。
0874login:Penguin
04/02/19 22:09ID:1aYGSfnX#define __KERNEL_SYSCALLS__
#include <asm/unistd.h>
int hogehoge(void)
{
int fd;
fd=open("hoge",O_RDONLY,0);
}
at 2.4.x
試してないけど。
0875login:Penguin
04/02/24 04:25ID:OerDcbnD#include <errno.h>
だとライブラリ関数のヘッダファイルをインクルードします.
#include <linux/errno.h>
で/usr/src/linux/include/linux/errno.hをインクルードしてみてください.
>>873
sys_openをモジュールの冒頭でextern宣言してもだめですか?
それと単純にカーネルでファイル操作をしたいのなら,ファイルディスクリプタを返す必要はありません.
acctシステムコールにヒントがあります.
#まずは本を読んで知識を得ることが先決だと思います.
0876login:Penguin
04/02/24 13:30ID:bvymi53Usys_openはEXPORT_SYMBOLされていない罠。
armあたりは見える様になってるな。メンテナの趣味かな。
#素直にドライバにしてread/write経由でやりとりした方が素直だと激しく思う。
0877login:Penguin
04/02/27 12:06ID:POIJFvcG実行が始まるわけですが、ld-linux.soというのは
カーネルのどの部分でロードされるのでしょうか。
straceで観察するとlibc.soをロードするシステムコールは
発行されていますが、ld-linux.soに対してはありません。
これというのはカーネルがロードしていると考えていいわけですよね。
その後、ld-linux.soがlibc.soをロードする。
0878login:Penguin
04/02/27 12:51ID:e6K8vpAQなのでロードしているのは ELF の処理部分ではないかと(fs/binfmt_elf.c とか)。
0879login:Penguin
04/02/27 14:10ID:vM/yZAhIfs/binfmt_elf.c:load_elf_interp
んでld-linux.soが参照している共有ライブラリを読んでくると。
興味があるならLinkers&Loadersかttp://ukai.jp/debuan/2002w/elf.txtを読むと
もっと詳しく書いてある。
0880login:Penguin
04/02/27 21:12ID:vdlMtlwTを吐いてくれるツールとか、ソースを可視化するようなツールがあれば
良いなぁと思い探しています。
今のところ以下のようなツールをみつけました。
global
ttp://www.gnu.org/software/global/
SourceNavigator
ttp://sourcenav.sourceforge.net/
他にも何か良いツールを知っている方がおられましたら
教えてください。
0881login:Penguin
04/02/27 22:01ID:/BhsszhI0882login:Penguin
04/02/27 22:02ID:PSE6rHdEDoxygenは?
http://www.fides.dti.ne.jp/~oka-t/doxygen.html
0883880
04/02/27 22:11ID:vdlMtlwT新たなツールを発見したので紹介します。
Sapid
ttp://www.sapid.org/index-ja.html
かなり期待できそうですが使い方がいまいちわかりません。
使っている人がいたら使用感を教えてください。
0884????A?L?A?N?e?N?A
04/02/27 22:13ID:V05PQgy90885login:Penguin
04/02/27 23:33ID:vM/yZAhIそれように書かれていないので、あんまし面白くない。
0886login:Penguin
04/02/27 23:49ID:xaaJLb2zカーネル実行中にコンテキストスイッチがおこってユーザープロセスが動き出すってことですか?
0887login:Penguin
04/02/28 00:00ID:A3wPssc7http://www.atmarkit.co.jp/flinux/special/kernel25/kernel25b.html
0888886
04/02/28 00:16ID:xSTzzvuP@IT読んでなんだかわかったような気分になれました。
0889login:Penguin
04/02/28 14:09ID:J2FeZbHS0890Linuxカーネルの仕組み
04/02/28 19:39ID:bMmaH5z2彼らがガンガッテいるのでLinuxは動いているのです。
以上。
0891login:Penguin
04/02/28 20:38ID:WjxTg2dVCPUはなんだろ
0892login:Penguin
04/02/28 21:02ID:u/+Sj8Sqhttp://www.linux.or.jp/JF/JFdocs/BogoMips/
PentiumとPentiumMMXでずいぶん違うな。
0893sage
04/03/14 02:28ID:g+4Nnj/K意外と理解できるものなんだね。ちょい感動。
0894login:Penguin
04/03/17 13:15ID:a5f2rjZpfreeの表示にある-/+ buffers/cache: のusedの数値は、
man freeには「使用中のメモリからバッファメモリを引いた値」とあるのですが、
だとすると
/proc/meminfo にある
Active: の欄はどういう意味でしょうか?
私の使用しているLinuxでは、freeでみると、-/+ buffers/cache の usedは、常時100MBを
下回らないほど大きく、自分ではちょっとおかしい気がします。
/proc/meminfoのActiveの数値は20〜30MBで、
現在動かしているプロセスのメモリ使用量(topやpsコマンドで確認)から考えるに
その数値は正しいのではないかと思います。
Linuxのメモリ使用量は、どのように読めば良いのでしょうか。
0895login:Penguin
04/03/17 13:33ID:a+ywf6ub> 現在動かしているプロセスのメモリ使用量(topやpsコマンドで確認)から考えるに
どう計算したの?
0896894
04/03/17 14:23ID:a5f2rjZp>895さん
ps -xl --sort -vsize
で、VSZを目算で足してました。が、これも実際にawk使って
足してみたら、freeの数値ともActiveの数値とも大きく異なっていました。
そもそもpsのSZとVSZの違いからしてわかってないので、そっちを先に調べることにしまつ、、
とりあえず、manからアタックはしてるのですが、
man proc も、 man ps も、 man free も、「そもそもメモリを理解してる人が
読むもの」な気がします。
どなたか「馬鹿野郎、ここ嫁!」っていうヒントがあったら教えてください。
0897login:Penguin
04/03/27 16:24ID:q39k7y+S0898login:Penguin
04/03/30 03:22ID:ic2Sy5Sj0899login:Penguin
04/03/30 17:15ID:PoJ7z2hxcachedはページキャッシュ
0900login:Penguin
04/03/30 18:31ID:VHI8Xdt8Thanks!
0901login:Penguin
04/03/31 23:27ID:1pGTvgen板の下の方でひそひそ話なのですね。
ス・テ・キ
0902login:Penguin
04/04/08 19:09ID:dz3aoHOSfile_permissionで渡ってくるパラメータが struct file * file, int mask の2つのみで、
これだとシステム全部のファイルI/Oが引っかかる為、
実際にフックしたいディレクトリのみにしぼりたく、
フルパスを取ろうとしているのですが どうやってもできません… (涙
神様はいませんでしょうか?
------------------------------------------------
int iCnt = 0;
struct dentry *pEntry = file->f_dentry;
/* 逆順にたどる */
while ( pEntry->d_inode && pEntry->d_count.counter )
{
pParent[iCnt] = (char *)kmalloc( pEntry->d_name.len+1, GFP_KERNEL );
strcpy( pParent[iCnt], pEntry->d_name.name );
iCnt ++;
/* 上へ */
if ( pEntry == pEntry->d_parent )
break;
pEntry = pEntry->d_parent;
}
------------------------------------------------
レス数が900を超えています。1000を超えると表示できなくなるよ。