トップページ⇒linux
986コメント359KB

☆Linux カーネルの仕組みを勉強するスレ☆

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001login:Penguin01/10/02 17:44ID:38KkZsUQ
メモリ管理、プロセス、ファイルシステム色々ありますが
カーネル全般について語り合うスレッドです。
0831login:Penguin03/12/30 00:01ID:j3HEXdDL
内部とかじゃなくカーネル設定で取捨選択ができる程度の知識を勉強できるとこってない?
0832ヽ(´ー`)ノ03/12/30 22:27ID:w1ByrpYn
>>831
付属のドキュメントじゃダメなん?
Documentation/* とか、{menu,x,g}config の時み見れるヘルプとか。
0833login:Penguin03/12/31 00:05ID:4ZezigAR
>>831
本であれば以下はどうか
Linuxカーネル設定ガイド
ttp://www.amazon.co.jp/exec/obidos/ASIN/4798100889
0834login:Penguin03/12/31 09:04ID:CE2m/NA+
>>833
ヨゴシの本なんか誰が買うか
0835login:Penguin04/01/07 01:47ID:EmIK8cJs
仮想メモリ(プロセス空間)の見積方法を調べています。

そもそも、仮想メモリ空間にマッピングされる領域には、
どのような領域があり、かつ、その領域の見積方法は
どうするのでしょうか?以下の領域を推測しています。

 ・OSカーネル
 ・ドライバ
 ・プログラムソース
 ・スタック
 ・ヒープ

この他にも、I/Oバッファや共有メモリ, ディスクキャッ
シュなども入るのでしょうか?



また、作成したプログラムのソースコード部分の領域の
大きさの見積方法はあるのでしょうか?(例えばC言語)

以上、よろしくお願いします。
0836login:Penguin04/01/07 22:21ID:x+u/tPyi
見積もりたいものが分かっていない悪寒。
分からん用語は使わずに何が知りたいかをくだ質スレに書け。
0837煽りイカ04/01/11 21:46ID:PPiKfNSH
先生、カーネルに付いて勉強しようと、ソースのプリントアウトを
始めたんですが、既にインクジェットのカートリッジを10個以上消費
しています。この戦いはいつまで続くんでしょうか?
プリントアウトした紙は、片っ端から製本業者に出しているので、
この出費もばかになりません。
0838login:Penguin04/01/11 22:09ID:26nuhaia
>>837
本当に紙のものが欲しいなら、すでに印刷して製本したものが書店で売ってあ
るから買えばいいですよ。でも紙で読むのはつらい。

lxr等のツールを使って眺めるとか--これも自前でやらなくてもlxrのサイトに
lxrかけたソースがおいてあるからwebブラウザで眺める--か、make tags(もし
くはTAGS)してviなりemacsで読むのがいいと思いますよ。

概要をつかむなら、まずディレクトリの構造を適当にながめたあと(or眺めつ
つ) init/main.c の start_kernel() から読み始めるのがいいと思います。
大変だけど、続ければ必ず読めるし、得るものは大きいから、がんばって。
0839login:Penguin04/01/12 17:15ID:lpS+N9kG
>>838
マジレスカヨ
0840login:Penguin04/01/13 01:07ID:odyLziqA
シェルについてですが なぜ シェルレベルがあるのですか
たとえば echo $SHLVL と打ちますと 2 とでたり
bash bashと続けて打てば 4となります
0841login:Penguin04/01/13 07:19ID:yowy6EM0
シェルレベルはカーネルと関係ない話なので、くだ質で再質問をお願いします。
# そのさい誘導されたことを付記してください。でないとマルチ呼ばわりされそう。
0842login:Penguin04/01/15 19:55ID:q7MiFnSU
2つ質問があります.

1:
カーネル側からroot権限であるデーモンプログラムかどうかのフックをする際に,
root権限である && setsidで制御端末から独立するのでcurrent->tty==NULL
という以外に条件はないでしょうか?
この条件だけだと端末からemacsを起動したときや,
デーモンプログラムから呼び出されたと思われるrmやchownなどもフックしてしまうようです.

2:
プロセスからあるデータへの参照をカウントしています.
その参照はコマンド名で対応づけられています.
カウント数が2の場合に,ps | grep [コマンド名]すると1つしかありません.
ん?と思って参照しているプロセスのコマンドラインをみてみると
(参照しているプロセスのpidは分かっています),
-:0
と表示されています.
これは一体どういう意味でしょうか?
pstreeコマンドでは「-:0」がちゃんとしたコマンド名で2つ表示されていました.
ちなみにそのコマンド名はwdm.binです.

よろしくお願いします.
084384204/01/15 19:57ID:q7MiFnSU
新規書き込みでsageてしまいました・・
0844login:Penguin04/01/15 22:13ID:mabMTQF9
1だけ
親がinitかどうか確認するとか。
daemon(3)使っていればinitが里親になるはず。
0845login:Penguin04/01/16 02:09ID:c7u8nyNC
>>844
ありがとうございます.
initにゾンビの始末をさせていたんでしたね.忘れてました.
emacsの方はsetsidを使って(emacsからforkしてemacsserverが実行されるまでの間),
しかもバックグラウンドで実行した場合initが親になるので無理なようです.
084684204/01/17 17:37ID:KaSlkRb2
2つ目の理由が一応分かりました.
psでは通常,コマンド名の表示に/proc/cmdlineを参照します.
ただし,-cオプション(本当のコマンド名を表示する)をつけたときはcurrent->commを参照するようです.
で,proc_pid_cmdlineやexecve周りを眺めたましたが,上書きされる様子がない.
manで調べてみるとどうやらsetproctitleという関数を使ってコマンドラインの上書きが可能なようです.
引数として渡す文字列の先頭に「-」をつけると,- は無視され,フォーマット後の文字列がそのままセットされるようで・・
けれども,今の自分の環境のglibcではsetproctitleに関する記述はないのが変だなと思いますが.
特にこれ以上突っ込んでも自分の実装と関係ないので,放っておくことにします.
0847login:Penguin04/01/18 02:11ID:+zT3hNOG
プロセス切り替え時の動作なんですが、

・CPUにタイマ割り込みがかかる
・割り込みハンドラに処理が移る
・プログラムカウンタをそのプロセスのカーネルスタックにpush
・汎用レジスタの内容をプロセスディスクリプタのthreadに保存
・schedule()で次に処理するプロセス選択
・次に処理するプロセスのプロセスディスクリプタのthreadから汎用レジスタにロード
・次に処理するプロセスのカーネルスタックからPCにpop
・ジャンプ

という理解でいいのでしょうか?(自主的にCPUを放す場合は別として)

ということは、ほかのプロセスのカーネルスタックの一番上の中身を書き換えると、
違うところから実行が再開される?
0848login:Penguin04/01/18 14:35ID:EgN885Nx
>>847
> ということは、ほかのプロセスのカーネルスタックの一番上の中身を書き換えると、
> 違うところから実行が再開される?
signalの挙動がそうです。
0849login:Penguin04/01/23 09:07ID:R+JbGtsc
>>848
おお〜!なるほど
0850login:Penguin04/01/25 16:35ID:8CJ3FK3q
Linuxカーネルに新しい機能を付けて拡張するカーネルパッチを公開する場合,
ライセンスはGPLに従うと思うのですが,基本的には拡張するカーネルのバージョン
についているCOPYINGをそのまま持ってきてREADMEか何かで
「このソフトウェアはGPLでライセンスされています.詳しくはCOPYINGを読んでください」
と書くだけでよいのでしょうか?
0851login:Penguin04/01/25 19:58ID:B5VoqxYA
>>850
GPL の最後読んだ?
0852login:Penguin04/01/25 21:16ID:STnhf9z3
>>851
すいません.今読みました.

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:Penguin04/02/03 12:14ID:w95WYYei
ゾンビプロセスに関して質問です。

現在サーバを起動しているとメモリをどんどん減っていくという問題で困っています。
(もちろんfreeコマンドでキャッシュを差し引いたところを見ています)

メモリが圧迫された状況でも、topコマンドから消費メモリ順に並べても、
特にメモリを食っているプロセスはありません。

気になるのはゾンビプロセスが発生していることです。

>>842-845 にあるように
ゾンビは最終的にはinitに吸収されると思うのですが、
その際psやtopで見たinitの使用メモリは増大していくのでしょうか?

原因を特定できずに困っています。
現在は毎日再起動してなんとか運用中です。
0854login:Penguin04/02/03 12:55ID:5ayoX5Ue
>>853
ゾンビを生んでる人を見つけて退治する。
毎日核落としてたんじゃバタリアンの中の人もかわいそう。
0855login:Penguin04/02/03 13:05ID:dnjnuywS
>>853
そのゾンビプロセスが何のプロセスかわからないと何とも言えない
0856login:Penguin04/02/03 15:54ID:w95WYYei
>>854-855 レスありがとうございます
postfix->local(Postfixのローカル配送プロセス)->procmail->bashスクリプト
と起動されており、
procmailから下がゾンビになってます。

まずはこのゾンビがメモリ圧迫の原因かどうか確かめたいのです。

ちなみにinitのメモリ使用量は増加してません。
純粋に空きメモリだけが減っていきます。

このようにゾンビが起きることでメモリを減らすということはあり得るのでしょうか?
もしあり得るとしたら、ローカルユーザは簡単にサーバを落とせてしまうことになってしまいませんか?
0857login:Penguin04/02/03 16:14ID:5ayoX5Ue
>>856
じゃあprocmailを殺す
ありうるし落とせるよ
だから殺す
0858login:Penguin04/02/03 17:29ID:qJjZfJxc
>>853
>>842-845は孤児の話だ。
親が骨を拾ってあげないからゾンビになる。
ということで親ごと殺さないとダメかも。

と書いていて思ったが、現実世界に当てはめたらとんでもねー表現だな。
0859login:Penguin04/02/03 18:31ID:bGaWcOzS
>>858
その親には問題がありそうだね。
0860login:Penguin04/02/03 18:42ID:u8zu6V/I
>>858
ちゃんと面倒見ない親を探して対処しないとな。

ていうか、孤児はinitが引き取るから、
引き取った後ならいい人のinitを殺す話になってしまう(藁
0861login:Penguin04/02/03 20:59ID:NOAqHG+F
ゾンビはリターンコードしか必要なデータは持ってないから、
メモリはあまり食わないはず。
だいたいpsで見れば分かるじゃん。
086285304/02/03 21:22ID:w95WYYei
みなさんレスどうもです。

psで見るとこんな感じになってます。
926 16119 0.0 0.0 0 0 ? Z 22:24 0:00 [sed <defunct>]

しかしいつまでもゾンビが残るわけではなく、
ちょっと立つと自然に消えていきます。

自然に消えるゾンビなら気にしなくても良いのでしょうか?
それともゾンビが出ること自体がまずいのでしょうか?
0863login:Penguin04/02/03 21:35ID:iQ6XyeXR
子供をほっとくなんて。
親の顔が見たい。
0864login:Penguin04/02/03 21:59ID:qJjZfJxc
>>862
消えるなら、親の面倒見が悪いだけだろう。
気にするな。
0865login:Penguin04/02/03 22:07ID:5ayoX5Ue
>>861
死んだら出席簿から名前が消されるのに
ゾンビちゃんは出席簿に名前が残ったままだよ。
机は持ってかれるかもしれないけどさ。
0866login:Penguin04/02/09 23:34ID:APi7kHwb
 LKMでファイル操作をしようと open,write,closeあたりの
関数を使ってみましたが、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:Penguin04/02/10 00:13ID:0xm4A1oM
>>866
標準ライブラリは使えまへん。
strncpyは親切な人が同じものを用意してくれているから。
モジュールから呼べるのはEXPORT_SYMBOLで宣言されてる。

まじめにやるなら馬本嫁。
086886604/02/10 01:48ID:LKCK7qEy
>>867 アドバイスありがとうございます。
 EXPORT_SYMBOLでgrepしてみたら、i386_ksyms.cに記述されているのを
見つけました。
 strncpyなどは、特別にここで用意されていたに過ぎないのですね。
 馬本は、オライリーの「LINUXデバイスドライバ 第2版」のことでいいですか?
 ちょっと高いですが買って勉強します。
0869login:Penguin04/02/11 22:12ID:A4Mg4/pd
>>866
ライブラリ関数の使えないカーネル内でもシステムコールは使えますよ.
_syscall0とかのマクロを使うか,sys_openなど直接呼び出したりはできると思います.
0870login:Penguin04/02/12 13:38ID:8sD0wTgv
>>869
syscallマクロは、システムコールに再入してまうのであまりよろしくありまへん。
カーネルスレッド使えば問題ないけど。

そもそも、モジュールの中でファイル開いてごりごりやるのはどうかと思いますな。
0871login:Penguin04/02/15 18:11ID:UtEM83EN
>>870
rootkitのwebページを参照にしているようでしたので,「どうかと思う」ことを敢えてやりたいのかなと.

>>866
カーネル内でファイル入出力をするなら,sys_acct辺りが参考になるんじゃないでしょうか.
087286604/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

(続く)
087386604/02/19 04:01ID:3kajdZP1
(2) sys_openを使ってみました。
fd = 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:Penguin04/02/19 22:09ID:1aYGSfnX
>>872-873
#define __KERNEL_SYSCALLS__
#include <asm/unistd.h>

int hogehoge(void)
{
 int fd;
 fd=open("hoge",O_RDONLY,0);
}

at 2.4.x
試してないけど。
0875login:Penguin04/02/24 04:25ID:OerDcbnD
>>872
#include <errno.h>
だとライブラリ関数のヘッダファイルをインクルードします.
#include <linux/errno.h>
で/usr/src/linux/include/linux/errno.hをインクルードしてみてください.
>>873
sys_openをモジュールの冒頭でextern宣言してもだめですか?
それと単純にカーネルでファイル操作をしたいのなら,ファイルディスクリプタを返す必要はありません.
acctシステムコールにヒントがあります.

#まずは本を読んで知識を得ることが先決だと思います.
0876login:Penguin04/02/24 13:30ID:bvymi53U
>>875
sys_openはEXPORT_SYMBOLされていない罠。
armあたりは見える様になってるな。メンテナの趣味かな。

#素直にドライバにしてread/write経由でやりとりした方が素直だと激しく思う。
0877login:Penguin04/02/27 12:06ID:POIJFvcG
システムコールsys_execve()で、あるプログラムの
実行が始まるわけですが、ld-linux.soというのは
カーネルのどの部分でロードされるのでしょうか。

straceで観察するとlibc.soをロードするシステムコールは
発行されていますが、ld-linux.soに対してはありません。
これというのはカーネルがロードしていると考えていいわけですよね。
その後、ld-linux.soがlibc.soをロードする。
0878login:Penguin04/02/27 12:51ID:e6K8vpAQ
ld-linux.so.2 は ELFヘッダで指定されています。
なのでロードしているのは ELF の処理部分ではないかと(fs/binfmt_elf.c とか)。
0879login:Penguin04/02/27 14:10ID:vM/yZAhI
>>877
fs/binfmt_elf.c:load_elf_interp
んでld-linux.soが参照している共有ライブラリを読んでくると。

興味があるならLinkers&Loadersかttp://ukai.jp/debuan/2002w/elf.txtを読むと
もっと詳しく書いてある。
0880login:Penguin04/02/27 21:12ID:vdlMtlwT
Linuxカーネルを読もうと思っているのですが、ソースを食って仕様書
を吐いてくれるツールとか、ソースを可視化するようなツールがあれば
良いなぁと思い探しています。

今のところ以下のようなツールをみつけました。

global
ttp://www.gnu.org/software/global/

SourceNavigator
ttp://sourcenav.sourceforge.net/


他にも何か良いツールを知っている方がおられましたら
教えてください。
0881login:Penguin04/02/27 22:01ID:/BhsszhI
>>880 lxrは?
0882login:Penguin04/02/27 22:02ID:PSE6rHdE
>>880
Doxygenは?
http://www.fides.dti.ne.jp/~oka-t/doxygen.html
088388004/02/27 22:11ID:vdlMtlwT
Doxygenはよさそうだね。

新たなツールを発見したので紹介します。

Sapid
ttp://www.sapid.org/index-ja.html

かなり期待できそうですが使い方がいまいちわかりません。
使っている人がいたら使用感を教えてください。
0884????A?L?A?N?e?N?A04/02/27 22:13ID:V05PQgy9
UNIX カーネルはあッ、strategie しか知らずに済むのでしょう。けど、Linux は知らないよ。
0885login:Penguin04/02/27 23:33ID:vM/yZAhI
>>882
それように書かれていないので、あんまし面白くない。
0886login:Penguin04/02/27 23:49ID:xaaJLb2z
プリエンプトカーネルってなんでつか?
カーネル実行中にコンテキストスイッチがおこってユーザープロセスが動き出すってことですか?
0887login:Penguin04/02/28 00:00ID:A3wPssc7
>>886
http://www.atmarkit.co.jp/flinux/special/kernel25/kernel25b.html
088888604/02/28 00:16ID:xSTzzvuP
ありがとうございます
@IT読んでなんだかわかったような気分になれました。
0889login:Penguin04/02/28 14:09ID:J2FeZbHS
VFSの詳しい日本語解説をしているページを教えなさい
0890Linuxカーネルの仕組み04/02/28 19:39ID:bMmaH5z2
カーネルの中にLinusの小人が101人ほど入ってます。
彼らがガンガッテいるのでLinuxは動いているのです。

以上。
0891login:Penguin04/02/28 20:38ID:WjxTg2dV
bogomips 101っていったら
CPUはなんだろ
0892login:Penguin04/02/28 21:02ID:u/+Sj8Sq
>>891
http://www.linux.or.jp/JF/JFdocs/BogoMips/

PentiumとPentiumMMXでずいぶん違うな。
0893sage04/03/14 02:28ID:g+4Nnj/K
ソースを眺めていたらなんかLINUXの仕組みが分かってきたぞ。
意外と理解できるものなんだね。ちょい感動。
0894login:Penguin04/03/17 13:15ID:a5f2rjZp
Linuxの「現在使用中の」メモリの読み方について教えてください。

freeの表示にある-/+ buffers/cache: のusedの数値は、
man freeには「使用中のメモリからバッファメモリを引いた値」とあるのですが、
だとすると
/proc/meminfo にある
Active: の欄はどういう意味でしょうか?

私の使用しているLinuxでは、freeでみると、-/+ buffers/cache の usedは、常時100MBを
下回らないほど大きく、自分ではちょっとおかしい気がします。

/proc/meminfoのActiveの数値は20〜30MBで、
現在動かしているプロセスのメモリ使用量(topやpsコマンドで確認)から考えるに
その数値は正しいのではないかと思います。

Linuxのメモリ使用量は、どのように読めば良いのでしょうか。
0895login:Penguin04/03/17 13:33ID:a+ywf6ub
>>894
> 現在動かしているプロセスのメモリ使用量(topやpsコマンドで確認)から考えるに
どう計算したの?
089689404/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:Penguin04/03/27 16:24ID:q39k7y+S
物理メモリと仮想メモリを一緒にしてしまっているから混乱しているのかと
0898login:Penguin04/03/30 03:22ID:ic2Sy5Sj
そもそも、buffersって何を表しているの?
0899login:Penguin04/03/30 17:15ID:PoJ7z2hx
buffersはバッファキャッシュ
cachedはページキャッシュ
0900login:Penguin04/03/30 18:31ID:VHI8Xdt8
>>899
Thanks!
0901login:Penguin04/03/31 23:27ID:1pGTvgen
カーネルを語る方々って、
板の下の方でひそひそ話なのですね。
ス・テ・キ
0902login:Penguin04/04/08 19:09ID:dz3aoHOS
2.6から正式実装される LSMを作ってみています。

file_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;
}
------------------------------------------------
0903login:Penguin04/04/10 00:38ID:04yJkWho
age
0904login:Penguin04/04/10 01:33ID:M+qXKgd2
echo-udpって、port 7以外の複数のポートを
指定してエコーできませんか?
/etc/xinetd.d/echo-udpと/etc/servicesをいじれば
できそうな気はするのですが、だめかな?
0905login:Penguin04/04/12 10:07ID:KSP28miV
crypt()ってスレッドセーフではなかったのか..
_| ̄|○

やはりスクラッチからですか?そうですか。
0906login:Penguin04/04/12 11:06ID:VzmbJK3b
>>904
余裕で出来ると思うけどカーネル関係ないよ
0907login:Penguin04/04/13 09:48ID:nwYJmtfp
pci_map_page()、virt_to_bus()) などが参照する
pci_dram_offset 変数はどういう意味でしょうか?
ホストメモリの、PCIメモリ空間におけるオフセット、
という理解であっていますでしょうか?
0908login:Penguin04/04/13 23:17ID:V/u6W3OU
gccのインラインアセンブラって慣れてないから使いずらい。
#TASMをずっと使っていたので :-)

メモリ参照ではまってしまった。
(a,b,c)って書くと(a+b*c)だと思わなかったZE。
しかも、SourceとDestが逆!?
コンパイルして気づいたっっっ!!

これ全部直すのキツイっす!(泣
今日は徹夜だ。シクシク
0909ヽ(´ー`)ノ ◆.ogCuANUcE 04/04/14 09:28ID:6A+690eW
> (a,b,c)って書くと(a+b*c)だと思わなかったZE。
> しかも、SourceとDestが逆!?
両方とも info 見りゃ分かるんだけどな。
091090804/04/15 02:51ID:Z+dQWDMr
int a,b
asm("mov a, offset b");
↑上記の場合でのAT&T形式のアセンブリコードって何ですか?
offsetでエラーが出る

>>909
>両方とも info 見りゃ分かるんだけどな。
info gasですか?
探してみたんですけど見つからない。
0911login:Penguin04/04/15 09:12ID:ehDW48/A
>>910
mov $b,a
0912login:Penguin04/04/25 18:46ID:a4I3Ve2u
関数へのasmlinkage指定って、引数をレジスタ渡しにするのを禁止するための
ものだと思ってたんですが、void引数の関数にもちらほらasmlinkageが見られ
ますよね。これってどういう意図でつけてあるのか教えてくらさい。

0913login:Penguin04/04/25 19:30ID:PUgCYyE/
>>912
惰性でつけてるとみた。
include/linux/linkage.hを見ると何もしていないことがわかる。
0914login:Penguin04/04/26 02:04ID:90cdg9sZ
>>913
うげ、そんな適当なんだ。了解でつ。
ありがとう。
0915login:Penguin04/04/26 10:48ID:V5Uh0zsw
>>912
What is asmlinkage ?
ttp://kernelnewbies.org/faq/index.php3#asmlinkage

The asmlinkage tag is one other thing that we should observe about this simple function.
This is a #define for some gcc magic that tells the compiler that the function should not
expect to find any of its arguments in registers (a common optimization),
but only on the CPU's stack. Recall our earlier assertion that system_call consumes its first argument,
the system call number, and allows up to four more arguments that are passed along to the real system call.
system_call achieves this feat simply by leaving its other arguments (which were passed to it in registers) on the stack.
All system calls are marked with the asmlinkage tag, so they all look to the stack for arguments.
Of course, in sys_ni_syscall's case, this doesn't make any difference, because sys_ni_syscall doesn't take any arguments,
but it's an issue for most other system calls. And, because you'll be seeing asmlinkage in front of many other functions,
I thought you should know what it was about.
0916login:Penguin04/04/26 11:33ID:90cdg9sZ
>>915
それを読んで質問してるんだけど、なにか英文の解釈違いますか?
0917login:Penguin04/05/16 18:59ID:FC6L1zfD
1000!
0918login:Penguin04/05/17 19:36ID:nMrIOM1Y
ダウト
0919login:Penguin04/05/18 02:01ID:OpVrZf3y
Windowsにカーネルストリーミングって仕組みあるでしょ?
Linuxにもよく似たものってある?
教えてエロリポップな人!
0920login:Penguin04/05/25 05:20ID:JP2tAIIS
>>916
>それを読んで質問してるんだけど、なにか英文の解釈違いますか?
怒っちゃイヤ!!
0921login:Penguin04/06/21 08:22ID:1lgVmpvk
ほっしゅほっしゅ
0922login:Penguin04/08/08 16:46ID:8WCY4JUz
ほしゅSAGE

カーネルセキュリティーな方へ
http://security.ten.thebbs.jp/1089489561/
わたしにゃさっぱりだけどなんか面白そうなんで
紹介しときます。
0923login:Penguin04/08/28 22:13ID:PWSONyS6
自分は今、Kernel(x86のVer 2.6)内で処理するContext Switchの勉強をしているのですけど、
Context Switchの大体の動きはわかりましたが一つ疑問があります。
switch_toや__switch_to関数で汎用レジスタ(eax, ebx, ecx等)の退避を行っている箇所が
見当たりません。実際に退避しているレジスタは、eip,esp,fs,gsやfpuレジスタとかです。
Context Switch発生時、いったいどこで汎用レジスタを退避するのでしょうか?
0924login:Penguin04/08/29 01:01ID:nVxTwlJG
>>923
関数の呼び出しで破壊されてもいいレジスタはそもそも退避しない。
壊れるとまずいレジスタは関数のエントリでスタックに退避されている。

そういうのはアセンブラのソース吐かせて確認すればいいのではないかと思うが。
0925login:Penguin04/08/29 02:43ID:u2o1h55W
>>924
>関数の呼び出しで破壊されてもいいレジスタはそもそも退避しない。
>壊れるとまずいレジスタは関数のエントリでスタックに退避されている。
ってことは、例えばユーザランドのある関数を実行中に
そのプロセスの実行割り当て時間を使いきった場合、
その時点で使用していたレジスタを退避するのでしょうか?
であるなら、switch_toや__switch_toを処理している時点では、
汎用レジスタを退避しなくてもいいということになるんですが。

>そういうのはアセンブラのソース吐かせて確認すればいいのではないかと思うが。
そうなんですけど、いったいどこでそれをしているのかよくわかっていないので。
0926login:Penguin04/08/29 11:10ID:1PFwUqWG
switch_to()の前に、switch_toがやってるはず。

switch_to()は引数をeax、edxから引っこ抜くわけだから、
そのとき既に、このレジスタに(仮にA、Bとすると)その値が
保存されてないといけないわけ。

退避するって書いてるけど、switch_toがA、Bをeax、edx・・・
ああ、面倒。ここまで書いたら解かると思いますけど。

この辺り開けば、等価なコードが書かれてるでしょう。
0927login:Penguin04/08/29 16:36ID:cGtjWn1N
>>926
>switch_to()は引数をeax、edxから引っこ抜くわけだから、
>そのとき既に、このレジスタに(仮にA、Bとすると)その値が
>保存されてないといけないわけ。
引数にeaxとかが設定されているのはわかります。

>退避するって書いてるけど、switch_toがA、Bをeax、edx・・・
>ああ、面倒。ここまで書いたら解かると思いますけど。
いえ、自分が期待していたのはどっかで汎用レジスタを退避しているのでは
と思っていたのです。どっかでpusha,popaでもしているのかなと。

なんかよくわからなくなってきたので、もう一度調べてみます。
レスしてくれた方、ありがとう。
0928login:Penguin04/08/29 16:42ID:nVxTwlJG
>>925
ユーザーランドで使っているレジスタは例外発生時に退避されます。
entry.SのSAVE_ALLマクロ使ってる所。
0929login:Penguin04/08/29 19:36ID:cGtjWn1N
>>928
見てみます。ありがとう。
093092304/08/30 02:36ID:s/M5nqAJ
なんかわかったような気がしてきました。
暗闇の中に一筋の光が見えてきました。
レス数が900を超えています。1000を超えると表示できなくなるよ。