タイトル/名前 | 更新者 | 更新日 |
---|---|---|
日記/2011/03/02/本棚に積まれていた本、全部読み終わった。 | msakamoto-sf | 2011-03-02 09:29:48 |
読書メモ/「リンカ・ローダ実践開発テクニック」 | msakamoto-sf | 2011-03-01 16:25:44 |
日記/2011/03/01/うーん・・・ | msakamoto-sf | 2011-03-01 09:08:21 |
日記/2011/02/28/System.Reflection.Emitでの動的コード生成が謎の挙動を示す。 | msakamoto-sf | 2011-02-28 17:43:15 |
技術/Windows/メモリダンプ取得方法メモ | msakamoto-sf | 2011-02-27 13:42:52 |
日記/2011/02/26/暫くは宗像教授もおやすみか・・・。 | msakamoto-sf | 2011-02-26 18:45:48 |
日記/2011/02/23/ガンダムのデザイン+リリカルなのはシリーズ=戯言 | msakamoto-sf | 2011-02-23 20:19:14 |
日記/2011/02/18/C#も悪くないなぁ・・・。 | msakamoto-sf | 2011-02-18 18:37:37 |
日記/2011/02/18/VS2010のコマンドプロンプト | msakamoto-sf | 2011-02-18 09:43:50 |
読書メモ/「C/C++セキュアコーディング」 | msakamoto-sf | 2011-02-10 12:37:19 |
1-2月に読み終えた本:11冊
2010年の消化冊数32冊に加え、合計43冊。
・・・これだけの書籍が、「いつか読まなきゃ、いつか読まなきゃ」と本棚を目にするたびに焦りを生み出していたわけで。ある意味ストレス源だったのかも。
でもねぇ。サンプルコード付きで手を動かして学べるタイプの書籍とかは比較的じっくりと取り組めて、内容も面白いのが多かったんだけど、理論中心の「文章だけ」とか、コードを載せてても「解説だけ、紹介するだけ」の本は結局「流し読み」みたいになっちゃって。
なんというか、焦ってファーストフードみたく詰め込むだけ詰め込んだ感があって、虚しさというか哀しさが残る。
短期間に詰め込んだ知識は、同じく短期間に忘れちゃうし。
血肉にならない。
入ったと思ったら、すぐ次の書籍の内容が入ってきちゃうので、血肉になる暇もなく押し出されて出て入っちゃうみたいな。
とはいえ、とにかく一度は頭を通したわけだから、本当に必要な分は残ってると思う。思い、たい。
とりあえず1年に渡りニートを続けてきた目的の一つが達成されたので、数日はまったりします。
ELFフォーマットとリンカについて丁寧に解説された至高の一冊。
特筆すべきは豊富なサンプルコードを通じて「手を動かして」学べる点。インタビューにもあるが、どうしても理論的な話で終わってしまいがちなリンカやELFフォーマットを、サンプルコードを自分でコンパイルし、binutilsのツールを使ってダンプし中身を確認していくことで理解を深めることが出来る。
ただ一点、惜しむらくはPLTとGOTについて第11章たった1つに押し込められた上、ページ数の都合か文章だけの説明に終わっており、概念レベルの図が無い点。PLTとGOTのぞんざいな扱いは"BINARY HACKS"や"DEBUG HACKS"にも見られ、"BINARY HACKS"ではそもそもPLT/GOTだけの解説トピックが存在せず、"DEBUG HACKS"でようやく"HACK #63"でデバッグと絡めて解説されているのみ。
この補填としては、下記ドキュメントに概要レベルで図入りの解説がある。
PLT/GOTについて若干の不満があるものの、全体としては実践的で分かりやすい内容なので、今まで断片的に学んできたELFとリンカの知識をまとめ直したい人も含めて広くオススメできる一冊です。
実家のほうで親とかジジババとかの面倒というか世話とかの人手が足りなさそう。
可能性の一つとして考えていた実家へのUターンが、かなり確度が上がってきてる。
千葉県の香取市が実家なんだけど、プログラマの仕事も少ない。
ましてや世話とか面倒見たりとなると在宅中心になっちゃうし。
さて、どうしようか。
読書メモ/"Advanced .NET Debugging"で紹介した"ADND本"だが、Chapter4のサンプル、04CodeGenがおかしな挙動を示す。
System.Reflection.Emitを使って、DynamicMethodとILGeneratorとで実行時にCLRのコードを出力しメソッドを作り、JITコンパイルを経て実際に呼んでみるサンプル。どんなコードを出力するかというと、int引数を二つ取り、足し算した結果を返すだけのシンプルなコードだ。
04CodeGen.cs:
using System; using System.Text; using System.Reflection.Emit; namespace Advanced.NET.Debugging.Chapter4 { class CodeGen { private delegate int Add(int a, int b); public static void Main() { Type[] args={typeof(int), typeof(int)}; DynamicMethod dyn = new DynamicMethod("Add", typeof(int), new Type[] { typeof(int), typeof(int) }, typeof(CodeGen), true); ILGenerator gen = dyn.GetILGenerator(); gen.Emit(OpCodes.Ldarg_1); gen.Emit(OpCodes.Ldarg_2); gen.Emit(OpCodes.Add); gen.Emit(OpCodes.Ret); Add a= (Add) dyn.CreateDelegate(typeof(Add)); Console.WriteLine("Press any key to invoke Add method"); Console.ReadKey(); int ret = a(1, 2); Console.WriteLine("1+2={0}", ret); } } }
・・・が。
> 04CodeGen.exe Press any key to invoke Add method 1+2=4
( ゚д゚)ポカーン (つд⊂)ゴシゴシ ( ゚Д゚)・・・はぁぁああ!!???
デバッグしてみる。環境はWin7(32bit)でCLR2.0(.NET 2.0, 3.0, 3.5) + CLR4.0両方入り。
Windows XP SP3, Windows 7 上でのメモリダンプ取得方法メモ。
基本的に "Debugging Tools for Windows" 無しの状態を想定しています。つまりユーザー環境でアプリケーションクラッシュやハングアップ、あるいはBSODが発生した瞬間を捕まえるための設定をメモしていきます。
なお一部のシナリオではMicrosoftから公開されている"UMPD : User Mode Process Dumper"というツールを使っています。
以下の環境で動作確認しています。いずれも日本語版のWindowsを使っています。
Windows XP SP3 : x86(32bit), Windows 7 上のXP Modeを利用 → Win2k, WinSrv2003 など Windows 7 : x86(32bit) → Vista, WinSrv2008 など(全て表示する)
宗像教授の「異考録」シリーズが第15集で完結となった。
「伝奇考」シリーズからのファンだったので、暫くは宗像教授の姿を見られなくなるのは寂しい。
とはいえ、あくまでもお休みであって、宗像教授シリーズ自体が終わったわけではない。
舞台を移しての新シリーズ開始を期待したい。
スピリッツでは星野先生のもうひとつの独壇場、ハードSFの連載が開始されている。一読者として、この巨匠の筆致からまだ目を離すわけにはいかないようだ。
前から微妙に気になっていたんだけど、ガンダムの、特に主人公サイドが搭乗する機体のデザインって、なんか女性っぽい感じがしてるんですが頭おかしいですか?
さすがに初代ガンダムとかガンダムMkIIとかはそんなでもないですが。
でも、なんとなく脚部のデザインとか、ふくらはぎとか太もものラインとかがみょーに女性っぽい脚線美を感じるんですよ。
腰部も、スカートっぽいデザインでお股の部分を保護するシールドに囲まれてて、ミニスカっぽいし。
腰部から胸部の排熱口(?)にいたるまでの「くびれ」かげんも色っぽい。
さらに、胸部の前に出っ張ってる感じはもろに女性の胸を意識したデザイン・・・のように、感じる。
顔もすらりとしていて面長美人。
腕部も大抵のガンダムは白くてスラリとしたデザインで、二の腕の色っぽさを感じ・・・られ、なくもない。
で、「リリカルなのは」シリーズあるじゃないですか。アニメは見てないんですが、やる夫AAシリーズがきっかけでいくつかYouTube上のmadを見たりしたんですが。
最近、「ガンダムのデザインに潜む女性のイメージ」と「リリカルなのは」という全くかけはなれた二つが融合しました。
「あ、『なのはシリーズ』はガンダムをまるごと女の子にしたアニメなんだ。」
う~ん、広範囲なアニオタの心を掴んでいる理由が分かる気がします。戦闘シーンとかも確かに魔法を使っては居ますが、ロボットアニメ系の光学兵器にも見えますし。ガンダム00で「こんなビーム弾アリかよ!?」って驚いた「曲がるビーム攻撃」も、似たようなのをなのはさんが使ってたりします。
ガンダムの話に流れを戻すと、ガンダムシリーズの主人公は男です。少なくとも自分が知ってる初代、Z, ZZ, Vガン、00、メイン中のメインの主人公でガンダムを操縦するキャラは男です。いや、女性パイロットも居ますが、主人公キャラとしては男です。
となると、密かに女性のイメージが埋め込まれたガンダムの中に男が潜り込んでえっちらおっちら操縦する・・・なんだかイヤラシイ、というかHな印象がします。・・・まぁ自分の頭が茹で上がっているという可能性は置いておきます。
これから連想するのはエヴァンゲリオンの初号機とシンジ君の関連です。ネタバレになっちゃうのでDVDとかアニメを見て欲しいです。
この辺をもうちょっと掘り下げるのも面白そうですが、ちょっと頭の整理が追いつきません。
読者の皆さんはガンダムのデザインに「男性」と「女性」のどちらを感じますか?
ふとしたきっかけでC#を触ってみましたが、悪くない感じです。JavaとC++のイイトコどりに加えdelegateやdynamic型など一部ではJavaより柔軟。なおかつ、いざとなればunsafe+ポインタ型でWin32APIも呼べちゃう。COMとの相互運用性も考えられてる。
一言で言えば、「こりゃ便利」。
あと面白かったのがMSDNドキュメントのサンプルコードの書き方で、braceを改行して置くように統一されてる点。
if (...) { try { } catch (...) { } } else { }
じゃなくて、
if (...) { try { } catch (...) { } } else { }
こんな感じが多いんです。なんか新鮮な感じ。
あ、あと、メソッドが
toString()
じゃなくて
ToString()
みたいに、頭が大文字になってるのが最初ちょっと面食らいました。すぐ慣れましたけど。
というわけで C# + .NET 4.0 までのイロハはざっと体に通しましたので、いよいよ "Advanced .NET Debugging" を読み始めます。
.NET 4.0 使おうと思ってVC#2010 ExpressEdition入れてみたけど、VSのコマンドプロンプトが見つからない。
「もしかして・・・」と思ってVC++2010 ExpressEditionいれてみたところ、スタートメニューに登録された。
簡単なサンプルプログラムを打ち込む程度ならコマンドプロンプトからコンパイル・実行がお手軽なので、やっぱり無いと落ち着かないんだよね・・・。
C/C++プログラマにオススメの一冊です。
C/C++プログラミングで作りこんでしまいがちなソフトウェアの欠陥と、それがどのように脆弱性として発現し攻撃されるかを幅広く、かつ分かりやすく解説しています。WindowsとUnix系の両方を対象とした包括的な内容になっています。
注意点としては、包括的な解説のトレードオフとして理論解説の比重が高くなり、実際に手を動かして確認する実践的な内容が薄くなっている点があります。やはり自分で試してみないと気が済まない方は、JPCERT/CC主催の"C/C++ セキュアコーディングセミナー"に参加してみてはいかがでしょうか。
遠方であったりして日時の都合が取れず参加できない・・・そのような場合でも、実践に重点を置いた書籍もありますし、教材としてわざと脆弱性を作りこんだプログラムがIPAで公開されています。そうしたリソースも活用してみて下さい。
特にWindowsで実践する場合は、WinDBGの使い方と合わせてスタック・ヒープの破壊やメモリアロケータの内部動作、Windowsの提供するクリティカルセクションやmutexなど競合・ロック関連のトラブルなどを解説した "Advanced Windows Debugging" の一読をお薦めします。
「CERT Cセキュアコーディングスタンダード」も出版されており、C言語に絞ってより具体的かつ実践的なお作法を解説しています。こちらはWeb上でも公開されており、日本語版も利用できます。