[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: xinit: Exec format error. Binary file not executable.



 現実逃避しまくり (pmap.c の実装はほとんど終ってるのに…) の電通大の齊藤です。

 kernel では sprintf しかなくて恐かったので snprintf を作ったのですが
(「全て」を snprintf 化するつもりは僕にはありません)、この時に気がついた
のが kern/subr_prf.c::kprintf() の

 > rflag:		ch = *fmt++;
 > reswitch:	switch (ch) {
 > 		/* XXX: non-standard '%:' format */
 > #ifndef __powerpc__
 > 		case ':': 
 > 			if (oflags != TOBUFONLY) {
 > 				cp = va_arg(ap, char *);
 > 				kprintf(cp, oflags, vp, 
 > 					NULL, va_arg(ap, va_list));
 > 			}
 > 			continue;	/* no output */
 > #endif
 > 		/* XXX: non-standard '%b' format */
 > 		case 'b': {
 > 			char *b, *z;
 > 			int tmp;

これってなぜですか? (素人さんモード)
最近 kern/ とか vm/ の下とか見ることが多いんですけど、
#if でアーキテクチャの区別をしてる部分って結構あるんですね。


 ところで

 > あとはさいとうさんの教えにしたがって 
 > % ktrace xinit
 >   :
 > % kdump ktrace.out
 > してみるとなにかわかるかも。

僕は、BSD 系に商用ソフトウェアが出ないのは ktrace されたら
いろんなことがすぐわかってしまうからとか本気で思ってました…。

ちなみに、以前某人から ssh を ktrace -i する話を聞いた時に
大ショックを受けました (tcpdump -x と相互に補完できてしまう
のが恐過ぎ)。

----------------------------------------------------------
		SAITOH Masanobu (msaitoh@spa.is.uec.ac.jp,
		                 msaitoh@netbsd.org)
		University of Electro-Communications
		ktrace(1) 普及促進委員会会員