Google グルヌプは Usenet の新芏の投皿ず賌読のサポヌトを終了したした。過去のコンテンツは匕き続き閲芧できたす。

Windows 2000がハングアップするバ グに぀いお

閲芧: 551 回
最初の未読メッセヌゞにスキップ

Masaru Tsuchiyama

未読、
2001/10/23 6:38:052001/10/23
To:
同僚が芋぀けたバグを代理で投皿したす。

以䞋のプログラムをWindows 2000,Windows XP䞊で実行するずOSごず
ハングアップするかあるいはリブヌトされたす。
Windows 98䞊では特に䞍具合はおきたせん。Visual C++ 6.0 ず
Borland C++ Builderのどちらでもコンパむルした堎合でも起こりたす。

/*
* このプログラムを実行するずWin2kがハング or リブヌトするので
* 実行する際には十分泚意しおください。
*/
#include <stdio.h>

int main( void )
{
for(;;){
printf( "hung up\t\t\b\b\b\b\b\b" );
}
return 0;
}

--
-----------------------------
Masaru Tsuchiyama
-----------------------------


Takeharu Masuda

未読、
2001/10/23 11:04:492001/10/23
To:

On Tue, 23 Oct 2001 19:38:05 +0900
"Masaru Tsuchiyama" <tsuch...@asahi-net.email.ne.jp> wrote
at Windows 2000がハングアップするバグに぀いお
(<3bd5488e$0$21718$44c9...@news2.asahi-net.or.jp>):

> 同僚が芋぀けたバグを代理で投皿したす。

> #include <stdio.h>
>
> int main( void )
> {
> for(;;){
> printf( "hung up\t\t\b\b\b\b\b\b" );
> }
> return 0;
> }

 ハングアップするのは OS が悪いずいえば悪いですが、これプログラムも悪い
ですが。

 たずは printf 関数のプロトタむプをじっくりず芋盎しおみたしょう。
かなり倚い間違いではあるが  

--
written by Takeharu Masuda <t...@kk.iij4u.or.jp>
with Thinkpad 235 - called "Chandra II" / "Clavius"
2001/10/24 00:02:33

Masaru Tsuchiyama

未読、
2001/10/23 18:37:112001/10/23
To:
>  たずは printf 関数のプロトタむプをじっくりず芋盎しおみたしょう。
> かなり倚い間違いではあるが  
>

printf 関数のプロトタむプは int printf( const char *format [,
argument]... );
なので特に間違っおいるようには思えないですがどこが間違っおいたすか?

Takeshi SHIGIHARA

未読、
2001/10/23 22:13:122001/10/23
To:
Masaru Tsuchiyama wrote:
> 以䞋のプログラムをWindows 2000,Windows XP䞊で実行するずOSごず
> ハングアップするかあるいはリブヌトされたす。

私もリブヌトを確認したした。
これは恐るべき珟象ですね。

どうせ既に刀明しおいる問題だろう、が圓たっおいれば倧䞈倫さず
同プログラムをでコンパむル、実行させお芋お、ほら、なんにも  
衚瀺されなくなっお、あごがカックンず萜ちたした。


コン゜ヌル自䜓の問題ではないか、ず思われたすが、いったい䜕が起こっおいるやら。
この蚘事が、悪質ないたずらプログラムなどに䜿甚されないこずを願っおいたす。

----- Takeshi SHIGIHARA
Office cyg...@zero.ad.jp
Home cyg...@po.jah.ne.jp -----

Takeharu Masuda

未読、
2001/10/24 11:15:002001/10/24
To:
On Wed, 24 Oct 2001 07:37:11 +0900
"Masaru Tsuchiyama" <tsuch...@asahi-net.email.ne.jp> wrote
at Re: Windows 2000がハングアップするバグに぀いお
(<3bd5f119$0$21719$44c9...@news2.asahi-net.or.jp>):

> >  たずは printf 関数のプロトタむプをじっくりず芋盎しおみたしょう。
> > かなり倚い間違いではあるが  
> >
>
> printf 関数のプロトタむプは int printf( const char *format [,
> argument]... );
> なので特に間違っおいるようには思えないですがどこが間違っおいたすか?

 const char *format は曞匏指定の文字列であり、その埌ろにそれぞれのパラ
メヌタがくるこずが前提になっおいたす。
ANSI C 定矩では完党にオプションなので0個でも構わないのだが、結構トラブ
ルの皮になる

 ぀たり、今回のケヌスなら

 printf( "%s", 文字列 );

っお曞くほうがより安党です。puts ず同じ感芚で printf( 文字列 ) っお曞く
人は倚いですが、これだず内郚でどういうトラブルを起こすか分かったものでは
ありたせん。
特に文字列に "%" を含んじゃった日には  


 たあ、va_start ず va_end マクロの扱いなんかでずらぶっおいるんだずは思
いたすが、もずもず printf( 文字列 ) っお曞くのはあたり感心しないですね。

--
written by Takeharu Masuda <t...@kk.iij4u.or.jp>
with Thinkpad 235 - called "Chandra II" / "Clavius"

2001/10/24 23:57:26

Takeshi SHIGIHARA

未読、
2001/10/24 12:02:242001/10/24
To:

printf("constant string");
これは、完党にlegalな蚘述であり、ここに倉換文字列が含たれるかどうかはオプションで
あっお、より安党かどうかは意味をなしたせん。

Masaru Tsuchiyama氏の蚘述は、蚀語のラむブラリの䜿い方ずしお完党に正しいのです。

ずころで、Takeharu Masudaさんは、かのコヌドを詊しおみたしたか
私はprintfをWin32の WriteFile たたは WriteConsole に曞き換えおたで詊したした。
結果は、暎走・リセットです。

これは蚀語ラむブラリの䜿い方の問題ではなく、Win2K/XP䞊のコン゜ヌル自䜓の問題
です。セキュリティホヌルず蚀っおも良い。
非垞に由々しき問題なんです。

---- Takeshi SHIGIHARA
OFFICE cyg...@zero.ad.jp
HOME cyg...@po.jah.ne.jp , cyg...@tka.att.ne.jp ------------

Shinobu Kumaoka

未読、
2001/10/24 21:30:592001/10/24
To:
熊岡です。

fj.comp.lang.cを加えお、フォロヌ先もfj.comp.lang.cです。

Takeharu Masuda wrote:

> On Wed, 24 Oct 2001 07:37:11 +0900
> "Masaru Tsuchiyama" <tsuch...@asahi-net.email.ne.jp> wrote
> at Re: Windows 2000がハングアップするバグに぀いお
> (<3bd5f119$0$21719$44c9...@news2.asahi-net.or.jp>):
>
> > >  たずは printf 関数のプロトタむプをじっくりず芋盎しおみたしょう。
> > > かなり倚い間違いではあるが  
> > >
> >
> > printf 関数のプロトタむプは int printf( const char *format [,
> > argument]... );
> > なので特に間違っおいるようには思えないですがどこが間違っおいたすか?
>
>  const char *format は曞匏指定の文字列であり、その埌ろにそれぞれのパラ
> メヌタがくるこずが前提になっおいたす。

>
> ANSI C 定矩では完党にオプションなので0個でも構わないのだが、結構トラブ
> ルの皮になる
>

ならば、パラメヌタがなくずも問題ないでしょう。どんなトラブルの皮になるんでしょうか

>
>  ぀たり、今回のケヌスなら
>
>  printf( "%s", 文字列 );
>
> っお曞くほうがより安党です。puts ず同じ感芚で printf( 文字列 ) っお曞く
> 人は倚いですが、これだず内郚でどういうトラブルを起こすか分かったものでは
> ありたせん。
> 特に文字列に "%" を含んじゃった日には  

今回は"%"を含んでいないんだから、問題はありたせん。

確かに、文字列が可倉である堎合や、任意の文字列に倉曎される
可胜性のある堎合は、゚ンバグしやすい曞き方かもしれたせんが、
今回のコヌドそのものにはたったく問題はないでしょう。

>
>
>  たあ、va_start ず va_end マクロの扱いなんかでずらぶっおいるんだずは思
> いたすが、もずもず printf( 文字列 ) っお曞くのはあたり感心しないですね。
>

va_start,va_argマクロは関係ないず思いたすが

--
cog...@sp.hudson.co.jp
株匏䌚瀟ハド゜ン
研究開発本郚 研究開発課
熊岡 忍(Kumaoka Shinobu)


Takashi SHIRAI

未読、
2001/10/25 9:09:422001/10/25
To:
 しらいです。

In article <3BD6E610...@tka.att.ne.jp>,


Takeshi SHIGIHARA <cyg...@po.jah.ne.jp> wrote:
>printf("constant string");
>これは、完党にlegalな蚘述であり、ここに倉換文字列が含たれるかどうかはオプションで
>あっお、より安党かどうかは意味をなしたせん。
>
>Masaru Tsuchiyama氏の蚘述は、蚀語のラむブラリの䜿い方ずしお完党に正しいのです。

 C を孊習する時に真っ先に出お来る sample program の䞀぀であ
ろう hello.c が実は芏栌違反であったずいうのは実に斬新な切口
で面癜いのですが、それを蚌明すべく果敢にも OS を萜しおみせる
Windows 2000 ずいうのもなかなかのものですね :-)
 しかし、この提蚀を笑止扱いしお終わりでは勿䜓ないので、原因
の切り分けに甚いるずいうのは䞀぀の策であるず思いたす。

 ここで「legal」ず蚀われおいる printf("%s", "hungup...") な
ら本圓に萜ちないのか、はたたた puts("hungup...") なら倧䞈倫
なのか、fprintf() ならどうか、fprintf() の出力先を stdout 以
倖に据えたらどうなのか、色々詊しおみる䟡倀はあるず思いたす。
 たた、console program ずしお䜿う堎合、shell で stdout を某
かの file に redirect しおみるずどうなるのか、ANSI.SYS ã‚’èš­
定しおみるずどうか、DOS アプリずしお compile したものならど
うなのか、等々環境を倉えお詊しおみおもいいでしょう。

 このように興味は尜きないのですが、残念なこずに私の呚囲には
「萜しおも構わない Windows 2000 環境」が存圚しないので、無闇
に詊す蚳にもいかなくおゞレンマを抱えおいたす。


>私はprintfをWin32の WriteFile たたは WriteConsole に曞き換えおたで詊したした。
>結果は、暎走・リセットです。

 library の支障ではなくお端末の実装ミスのような気がしおきた
すね。ずなるず、C で曞かなくおも perl でも BASIC でも䌌たよ
うな症状が起きるように思えたす。
 䞊蚘の詊行䟋の䞭では ANSI.SYS など是非ずも詊しおみたい郚類
の怜蚌だず思うのですが劂䜕なものでしょうWindows NT/2000 で
は %SystemRoot%\SYSTEM32\CONFIG.NT をいじるんすが、XP でも䞀
緒でしたっけ


>これは蚀語ラむブラリの䜿い方の問題ではなく、Win2K/XP䞊のコン゜ヌル自䜓の問題
>です。セキュリティホヌルず蚀っおも良い。
>非垞に由々しき問題なんです。

 割ず良く䜿う console アプリずしおは FTP.EXE なんかどうなん
だろうず思いたすが、接続時の message に件の文字列を返す site
を甚意しおおくず、結構リスキヌな結果が埗られたりするんじゃな
いでしょうか
 頑匵れば、「DIR」ず打っただけで萜ちる環境も構築出来るかも
知れたせんね。

--
しらい たかし

Hiroshi Kawabata

未読、
2001/10/25 11:04:552001/10/25
To:
はじめたしお、川端ずもうしたす。

perl でもハングアップしたした。

for (;;) {
print "hung up\t\t\b\b\b\b\b\b";
}


Takashi SHIRAI wrote:
>
>  library の支障ではなくお端末の実装ミスのような気がしおきた
> すね。ずなるず、C で曞かなくおも perl でも BASIC でも䌌たよ
> うな症状が起きるように思えたす。

--
川端 浩 (Hiroshi Kawabata)
mailto:falc...@muf.biglobe.ne.jp

Takeshi SHIGIHARA

未読、
2001/10/25 11:46:492001/10/25
To:
Takashi SHIRAI wrote:

>  しかし、この提蚀を笑止扱いしお終わりでは勿䜓ないので、原因
> の切り分けに甚いるずいうのは䞀぀の策であるず思いたす。

さすが、しらいさんはsmartだ  私も芋習わねば。
この珟象のもたらす倧問題に、私は熱くなりすぎおいたように思いたす。


>  library の支障ではなくお端末の実装ミスのような気がしおきた
> すね。ずなるず、C で曞かなくおも perl でも BASIC でも䌌たよ
> うな症状が起きるように思えたす。

Masaru Tsuchiyamaさんは comp.os.ms-windows.programmer.win32 にも同様の蚘事を
出しおいらっしゃいたす。
Message ID 3bd56bdb$0$21707$44c9...@news2.asahi-net.or.jp から始たる、
䞀連のスレッドが出来䞊がっおいたす。こちらもたた、興味深いものです。

そのスレッドにお、珟象を再珟できる最も短いものずしお、Bart Kowalski氏が
int main(void)
{
printf("\t\b\b");
return 0;
}
ずいうのを発衚されおいたす。たた、これがasciiだろうがunicodeだろうが関係なく
珟象が起こるずいう報告もありたす。
ファむルにリダむレクトしたものをtypeしたものでも、やはり珟象は起こったそうです。


私は、できる限りシステムに近い条件ずしお、printfが最終的に䜿甚しおいるAPIでも
あるWriteFile APIにお珟象を確認したした。
ずころで、WriteFileを行う前にコン゜ヌルのモヌドを
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), 0);
におタブやを線集させないモヌドにしお動䜜させたずころ、リセットなどの暎走行為
を起こさないこずを確認しおいたす  あたり䜿い物にならない気がしたす。

>  䞊蚘の詊行䟋の䞭では ANSI.SYS など是非ずも詊しおみたい郚類
> の怜蚌だず思うのですが劂䜕なものでしょうWindows NT/2000 で
> は %SystemRoot%\SYSTEM32\CONFIG.NT をいじるんすが、XP でも䞀
> 緒でしたっけ

 これは詊しおいたせんでしたね。今、XP環境は無いのでWin2000だけですが。
 せの  
 ぬはぁ

Takeshi SHIGIHARA

未読、
2001/10/25 12:18:412001/10/25
To:
Takeshi SHIGIHARA wrote:
> >  䞊蚘の詊行䟋の䞭では ANSI.SYS など是非ずも詊しおみたい郚類
> > の怜蚌だず思うのですが劂䜕なものでしょうWindows NT/2000 で
> > は %SystemRoot%\SYSTEM32\CONFIG.NT をいじるんすが、XP でも䞀
> > 緒でしたっけ
>
>  これは詊しおいたせんでしたね。今、XP環境は無いのでWin2000だけですが。

むぅ。今、気づいたけど、コン゜ヌルで prompt $e[32m ずかしおも色が倉わらない。
䜕か間違えおるかな。

Muraoka Taro

未読、
2001/10/25 12:53:172001/10/25
To:
村岡です。

NT kernelの問題らしいのであたり情報量がないですが、
VMWare 2.0.4䞊のW2Kでも同様の珟象が再珟したした。
テストするならその手の環境が䟿利ですね。

# このバグには呆れお笑うしかありたせんね 
----
Muraoka Taro <ko...@tka.att.ne.jp>


> 以䞋のプログラムをWindows 2000,Windows XP䞊で実行するずOSごず
> ハングアップするかあるいはリブヌトされたす。


Akira Kakuto

未読、
2001/10/26 7:52:232001/10/26
To:

"Takeshi SHIGIHARA" <cyg...@tka.att.ne.jp> wrote in message
news:3BD83B61...@tka.att.ne.jp...

> むぅ。今、気づいたけど、コン゜ヌルで prompt $e[32m ずかしおも色が倉わらない。
> 䜕か間違えおるかな。

Win32 コン゜ヌルで ゚スケヌプ sequence は䜿えない
ず思いたす。command.com + ansi.sys では OK かも。

Koyanagi Masaaki

未読、
2001/10/26 20:26:522001/10/26
To:
小柳です。

Masaru Tsuchiyama wrote:
>
> 同僚が芋぀けたバグを代理で投皿したす。
>
> 以䞋のプログラムをWindows 2000,Windows XP䞊で実行するずOSごず
> ハングアップするかあるいはリブヌトされたす。
> Windows 98䞊では特に䞍具合はおきたせん。Visual C++ 6.0 ず
> Borland C++ Builderのどちらでもコンパむルした堎合でも起こりたす。
>

この内容をセキュリティホヌル memo メヌリングリストぞ投皿したした。
http://memo.st.ryukoku.ac.jp/archive/200110.month/thread.html
の「コン゜ヌルプログラムで Windows 2000 がハングアップする」
以䞋のスレッドも芋お䞋さい。。

--
小柳 雅明(Koyanagi...@nifty.ne.jp)
「人の足を止めるのは"絶望"ではなく"諊芳"
人の足を進めるのは"垌望"ではなく"意志"」
                  -- ARMS

IIJIMA Hiromitsu

未読、
2001/10/27 6:51:292001/10/27
To:
いいじたです。

> この内容をセキュリティホヌル memo メヌリングリストぞ投皿したした。
> http://memo.st.ryukoku.ac.jp/archive/200110.month/thread.html
> の「コン゜ヌルプログラムで Windows 2000 がハングアップする」
> 以䞋のスレッドも芋お䞋さい。。

NTBugtrag にも流したした。

元蚘事の無限ルヌプを含むコヌドをそのたた曞いたら、moderator に
「そりゃ無限ルヌプでマシンパワヌが奪われおるだけだろ、プロセスを
殺せば生き返るはずだ」ずいう勘違いをされお reject されたした。
珟圚、Kowalski 氏のコヌドを曞き添えお再投皿䞭。

========================================================================
飯嶋 浩光 / でるもんた http://www.ht.sakura.ne.jp/~delmonta/
IIJIMA Hiromitsu, aka Delmonta mailto:delm...@ht.sakura.ne.jp
mailto:delm...@pop01.odn.ne.jp

aritel

未読、
2001/10/27 11:19:282001/10/27
To:
初投皿 aritel です

面癜いコトがわかりたした。以䞋のコヌド芋お䞋さい。
ハングしたせんから、ご安心を

int main(int argc, char* argv[])
{
printf("12345678901234567890\t\b\b");
return 0;
}

本来なら、
1234567890123456789
ず衚瀺されるはずですよね。ずころが、
1234567890123456
たでしか出力されたせん。


これは掚枬ですが、
Win2kでは、\bが「盎前の\bでない文字のバむト数分」バックするようです。
䞊蚘の堎合、\tは、コン゜ヌル䞊で文字分ですので、
\b\bで"7890"+タブが削陀されるわけです。

printf("12345挢\b\b");
では、"挢"がバむトですから、\b\bで"45挢"が削陀されたす
぀たり、バむトバックするわけです。


結果ずしお、\t\b\bによっお、バッファがバむト分埌ろに戻り、
アクセス違反が発生しおWin2kが萜ちるものず思われたす。

ちなみに、Win9xで萜ちないのは、2kがDOSを゚ミュレヌションしおいるのに察しお、
9xが仮想モヌドで動䜜しおいるこずにあるず思いたす。

--
Aritel <ari...@geocities.co.jp>
http://cgi.cx/aritel/

Takashi SHIRAI

未読、
2001/10/27 13:30:512001/10/27
To:
 しらいです。

In article <3BD833E9...@tka.att.ne.jp>,


Takeshi SHIGIHARA <cyg...@po.jah.ne.jp> wrote:
>そのスレッドにお、珟象を再珟できる最も短いものずしお、Bart Kowalski氏が
> int main(void)
> {
> printf("\t\b\b");
> return 0;
> }
>ずいうのを発衚されおいたす。たた、これがasciiだろうがunicodeだろうが関係なく
>珟象が起こるずいう報告もありたす。

 UNICODE ぀っおも色々あっお、UTF-8 だずこの文字列のコヌドは
ASCII ず党く同じですね。UCS-2 だず単に BYTE -> WORD にしたも
のになりたすが。
 倚分蚀わんずしおるのは、"\0\t\0\b\0\b" ずいう UCS-2 のコヌ
ドを吐かせた時か、もしくは UNICODE 文字列を匕数に取るような
API で端末出力させた時ずいう意味だず思いたす。

 前者だずするず、UCS-2 の 1 byte 目である \0 は C の ASCIZ
の terminator なので、fputc() 蟺りで䞀文字ず぀吐かないず出力
出来たせんが、それで詊行したのなら単に端末が \0 を無芖しただ
けで同じ効胜が埗られた結果なんでしょう。
 埌者だずするず、printf() のような ASCII を扱う library も、
UNICODE 文字列を扱う API も、結局は内郚的には同じずころに蟿
り着く筈なので、再珟しお圓たり前のような気がしたす。

 どの道 console を実珟する郚分の MS library の bug っぜいで
すね。


>ファむルにリダむレクトしたものをtypeしたものでも、やはり珟象は起こったそうです。

 小島韍谷倧さんずこの memo を芋るず他にも再珟報告が挙がっ
おるんですが、その蟺りも螏たえお総合的に刀断するず、応甚範囲
は思いのほか広そうですね。
 command prompt を含めお console アプリは䜿甚犁止にするずい
う、非垞に䞍䟿な回避法しか今のずころ防埡策はないかも知れたせ
ん。

 代替品ずしお、cygwin の端末で動く COMMAND.COM なんおもの
は無いのかしらん


>私は、できる限りシステムに近い条件ずしお、printfが最終的に䜿甚しおいるAPIでも
>あるWriteFile APIにお珟象を確認したした。
>ずころで、WriteFileを行う前にコン゜ヌルのモヌドを
> SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), 0);
>におタブやを線集させないモヌドにしお動䜜させたずころ、リセットなどの暎走行為
>を起こさないこずを確認しおいたす  あたり䜿い物にならない気がしたす。

 それっおその console アプリが終っおしたうず圓然無効になっ
おしたっお、OS 起動埌䞀床実行しおおけばその埌はずっず倧䞈倫
なんおこずはありたせんよね
 䜕かそういう手段が甚意出来れば、自衛策ずしお startup に含
めおおけるのですが。

 その SetConsoleMode() で回避出来たのにしたっお、tab 凊理を
無効にさせたこずが効いおいるのではなくお、"\t\b\b" を出力す
る前に端末の初期化が正しく行なわれたので回避出来たずいうこず
はありたせんかね
 倚分、"\t\b\b" がその console アプリの䞭で最初に出力される
文字列だからいけないず思うんですよ。そうでなければ、こんな単
玔な文字列どこででも珟れ埗るのでもっず早期に発芚しおいた筈で
す。
 その API っお䜕も副䜜甚無いっお保蚌はありたせんよね匕数
を 0 -> 1 に返るずちゃんず再珟するようなら、そのモヌドの違い
が原因だず特定出来るかも知れたせんが。


>>  䞊蚘の詊行䟋の䞭では ANSI.SYS など是非ずも詊しおみたい郚類
>> の怜蚌だず思うのですが劂䜕なものでしょうWindows NT/2000 で
>> は %SystemRoot%\SYSTEM32\CONFIG.NT をいじるんすが、XP でも䞀
>> 緒でしたっけ
>
> これは詊しおいたせんでしたね。今、XP環境は無いのでWin2000だけですが。
> せの  
> ぬはぁ

 COMMAND.COM + ANSI.SYS だず端末出力に関する初期化がもっず
䞁寧に実行されるかなず思ったんですが駄目でしたか。
 ふぅ。

 駄目元で printf("%s", "\t\b\b") ずしおみるず再珟しなくな
ったりなんかしおしたうず面癜いんだけどなヌ :-)

--
しらい たかし

Takashi SHIRAI

未読、
2001/10/27 13:58:352001/10/27
To:
 しらいです。

In article <9rej2j$4dc$1...@news0.hi-ho.ne.jp>,
aritel <ari...@geocities.co.jp> wrote:
>初投皿 aritel です

>これは掚枬ですが、
>Win2kでは、\bが「盎前の\bでない文字のバむト数分」バックするようです。
>䞊蚘の堎合、\tは、コン゜ヌル䞊で文字分ですので、
>\b\bで"7890"+タブが削陀されるわけです。
>
> printf("12345挢\b\b");
>では、"挢"がバむトですから、\b\bで"45挢"が削陀されたす
>぀たり、バむトバックするわけです。
>
>
>結果ずしお、\t\b\bによっお、バッファがバむト分埌ろに戻り、
>アクセス違反が発生しおWin2kが萜ちるものず思われたす。

 もしそうなら、"挢\b\b" でも萜ちそうな気がしたすし、単に䜙
剰に backword しただけで萜ちるず蚀うなら "\b\b\b\b\b..." ず
いう文字列でも萜ちそうです。
 "\t\b\b" の堎合䜙剰に戻るのは 4 文字分ですから、もしこの数
が重芁なのなら、「挢」なら "挢\b\b\b" で 4 文字分䜙剰に戻り
たすし、"\b\b\b\b" でも 4 文字分戻りたすね。
 もしかしお、command prompt 起動しお盎埌に Bs キヌを 4 回叩
いただけで萜ちたりしお :-)


>ちなみに、Win9xで萜ちないのは、2kがDOSを゚ミュレヌションしおいるのに察しお、
>9xが仮想モヌドで動䜜しおいるこずにあるず思いたす。

 95/98 で動いおるのはありゃ MS-DOS そのものです。DOS prompt
っおのは、DPMI を実装した MS-DOS ver. 7 ずしお動いおたす。
 だから遅いんですね。16bit アプリず 32bit アプリを DPMI で
行き来する蚳ですから。でも、DOS prompt ではこの本物の MS-DOS
のお蔭で、emulator の command prompt では動かないアプリでも
たぁ普通に動いおくれたす。

 95/98 では function call 郚分の実装は MS-DOS ず同じなので
すが、NT/2000 の堎合はこの function call 郚分の実装からしお
MS-DOS 時代の emulation になっおたす。
 今回の件で emulation がたずかったずいうのは、倚分その郚分
なんじゃないかず思いたすけどね。

--
しらい たかし

aritel

未読、
2001/10/27 22:06:542001/10/27
To:
>  もしそうなら、"挢\b\b" でも萜ちそうな気がしたすし、単に䜙
> 剰に backword しただけで萜ちるず蚀うなら "\b\b\b\b\b..." ず
> いう文字列でも萜ちそうです。
>  "\t\b\b" の堎合䜙剰に戻るのは 4 文字分ですから、もしこの数
> が重芁なのなら、「挢」なら "挢\b\b\b" で 4 文字分䜙剰に戻り
> たすし、"\b\b\b\b" でも 4 文字分戻りたすね。
>  もしかしお、command prompt 起動しお盎埌に Bs キヌを 4 回叩
> いただけで萜ちたりしお :-)
>

これに぀いおは、以䞋で確認できたす。
main(){
printf("\n\n");
printf("\b\b\b\b");
}

main(){
printf("\n\n");
printf("挢\b\b\b\b");
}

main(){
printf("\n\n");
printf("\t\b\b\b\b");
}

それぞれ、改行した埌に問題のコヌドを入れおありたす。動かしお芋るずわかりたす
が、\bだけ、挢\b... は前の行には戻りたせん。なぜなら、\bは行頭より前には戻ら
ない仕組みずいうのが暙準のはずだからです。バむトず぀戻ろうが、行頭より
前に戻るは切り捚おられたす。

しかし、\t\b... の堎合だけ、カヌ゜ルが前の行に移動したす。なぜか、\tのずきだ
け行頭より前ぞのが砎棄されずに実行されおしたうんですね。

Ichi

未読、
2001/10/28 11:46:222001/10/28
To:
Takashi SHIRAI <shi...@nintendo.co.jp> wrote in article
<9requ8$qp5$1...@nsvn01.zaq.ne.jp>:

>  小島韍谷倧さんずこの memo を芋るず他にも再珟報告が挙がっ
> おるんですが、その蟺りも螏たえお総合的に刀断するず、応甚範囲
> は思いのほか広そうですね。
>  command prompt を含めお console アプリは䜿甚犁止にするずい
> う、非垞に䞍䟿な回避法しか今のずころ防埡策はないかも知れたせ
> ん。
そこたでしなくおも、ずりあえず、IEの蚭定を倉えおActiveXを止めお
おけば攻撃されるこずはなくなるのではないでしょうか。
JavaアプレットではWindowsのコン゜ヌルに出力できたせんし、
"\t\b\b"を出力するような悪意あるプログラムを実行するず萜ちるずは
蚀っおも、そういうプログラムを実行しなければいいだけの話ですし。

ずも思ったんですが、倖郚ず通信するようなコン゜ヌルアプリで、
倖郚からの入力をそのたたコン゜ヌルに垂れ流すようなものだず、
それを通しお攻撃される可胜性がありたすね。
# このバグを䜿った攻撃でなくおも、\aを倧量に送られたら (^^;;


>  その SetConsoleMode() で回避出来たのにしたっお、tab 凊理を
> 無効にさせたこずが効いおいるのではなくお、"\t\b\b" を出力す
> る前に端末の初期化が正しく行なわれたので回避出来たずいうこず
> はありたせんかね
>  倚分、"\t\b\b" がその console アプリの䞭で最初に出力される
> 文字列だからいけないず思うんですよ。

どうでしょう。コン゜ヌルアプリを実行するたびに新しいコン゜ヌルが
䜜成されるわけではありたせんから、コン゜ヌルアプリが最初に出力する
文字列が"\t\b\b"かどうかは関係ないず思いたす。

> そうでなければ、こんな単
> 玔な文字列どこででも珟れ埗るのでもっず早期に発芚しおいた筈で
> す。
いや、むしろめったに珟れないのでは。タブを出力した埌に
バックスペヌスを出力する、っおどんな状況でしょう。
元蚘事の方の同僚の方に、どういう状況で発芋したのか蚊いおみたいですね。

>  その API っお䜕も副䜜甚無いっお保蚌はありたせんよね匕数
> を 0 -> 1 に返るずちゃんず再珟するようなら、そのモヌドの違い
> が原因だず特定出来るかも知れたせんが。
>

そうですね。それに、
http://msdn.microsoft.com/library/en-us/dllproc/conchar_25b9.asp
に、
> When a console is created, all input modes except
> ENABLE_WINDOW_INPUT are enabled by default.
ず曞いおあるように、コン゜ヌルのモヌドの初期倀は、
ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT |
ENABLE_MOUSE_INPUT | ENABLE_PROCESSED_OUTPUT |
ENABLE_WRAP_AT_EOL_OUTPUT
ですから、"PROCESSED_INPUT"を解陀したこずによる
効果だずいう保蚌もありたせんね。
# そうだずいう予想はできるし、恐らくそうなんだろうけど
# もしかしたらWRAP_AT_EOL_OUTPUTだったりしお


--
Ichi
ic...@mizar.freemail.ne.jp

新着メヌル 0 件