タイトル/名前 | 更新者 | 更新日 |
---|---|---|
技術/Windows/ShellExecute()とデフォルトブラウザの起動、拡張子の関連付け | msakamoto-sf | 2010-07-13 12:18:07 |
技術/UNIX/XWindowSystemでマウスを左利きに変更する | msakamoto-sf | 2010-07-13 12:17:12 |
技術/Windows/バッチファイルTips | msakamoto-sf | 2010-07-13 12:16:21 |
日記/2010/07/12/cheap2elにCOFF LIBファイル解析機能追加 | msakamoto-sf | 2010-07-12 13:51:10 |
日記/2009/11/29/西田亙氏の「GNU Development Tools」読み終えた | msakamoto-sf | 2010-07-11 11:02:12 |
日記/2010/07/09/cheap2elにCOFF-OBJファイル解析機能追加 | msakamoto-sf | 2010-07-09 23:30:37 |
日記/2010/07/08/トマトジュースとジンジャーエール | msakamoto-sf | 2010-07-08 14:02:41 |
日記/2010/07/05/objとlibファイルのUnderTheHood私家版PDF | msakamoto-sf | 2010-07-05 12:46:49 |
C言語系/memos/VC++/10, "/NODEFAULTLIB"使用時の注意 | msakamoto-sf | 2010-07-04 15:31:54 |
C言語系/memos/VC++/09, スタック破壊の検出・防止("/GS", "/RTC", "/GZ") | msakamoto-sf | 2010-07-04 14:35:00 |
"http://"や"ftp://"など、一部のインターネットプロトコルのURLは拡張子と同様、そのプロトコル名でレジストリに関連づけが登録されている。ShellExecute()でファイル名を"http://"や"ftp://"など、レジストリに関連づけされたプロトコル名で始まるURIを指定することで、レジストリに設定されたデフォルトのWebブラウザやメーラを起動することができる。
簡単なサンプルと併せて、拡張子と関連づけされたアプリケーションが起動する為のレジストリ設定内容をざっくりとまとめておく。
という事で、一通り出揃ったので 1.2.1 としてリリースしました。
サンプルに objdump, libdump を入れてあります。
http://code.google.com/p/cheap2el/
からどうぞ。
2006年時点で購入済だったのだけれど、ちゃんと読んでいなかった。大学時代にInterface誌などでおおよそは把握していたから・・・という慢心もあった。
ちゃんと読み直してみたら、3年も経過してgccやbinutilsのバージョンも上がり、多少躓くところもあったものの全体として・・・「あれ、もう読み終わり?」という感じだった。Interface誌やUNIX USERで感銘を受けたLinuxカーネルのMakefileの解析やブートコードの解析、さらにシステムコールを直接呼ぶことでlibcの呪縛から解放された80バイトの"Hello, World"の作成などまでは立ち入っていない為、物足りない・・・。
躓いたところはここ。gccのバージョンアップの影響で静的リンクに必要なオブジェクトファイルが変更されていた為書籍通りに行かなかった。
実はInterface誌(2002年7月号)やEmbedded UNIX誌は引っ越す前に古本で処分してしまって、さらにUNIX USERでの"GCCプログラミング工房"の連載のコピーも廃棄してしまい・・・ああ~~~なんであの貴重な雑誌資料を廃棄するのかな~~~!!!なんて馬鹿な自分・・・!!
Embedded UNIXについては先日、ちょうど西田氏の連載が載っている分だけ(Vol1, Vol2, Vol6)がヤフオクに出ていたので速攻で落札。
問題はInterface誌2002年7月号の特集記事なのだけれど、取り戻したEmbedded UNIX誌や「BINARY HACKS」、「ふつうのコンパイラを作ろう」、「Linuxのブートプロセスを見る」(ASCII)などで上手く補完できるかもしれない。最悪、まだAmazonでInterface誌の2002年分のCD-ROM縮刷版が存在するのでこれを入手するほか無い・・・。でも縮刷版なだけあり、お値段もそれなり・・・。
とりあえずELFのノウハウやlibcからの解放はBINARY HACKSの方でも載っているし、Embedded UNIX Vol.6 にも載っている。BusyBoxについてはEmbedded UNIX Vol.1に、kernelのビルド部分の解説は同Vol.2のそれぞれ「Linuxシステム縮小化計画」に載っている。ルートファイルシステムの構築などその辺りは同Vol.6に。
さらに先日手に入れた組み込みLinux系の書籍ではソースツリーの構成やMakefileの中身、bzImageやブートローダからInitial RAMDISKの話まで網羅されている。それに「Linuxのブートプロセスを見る」(ASCII)を併せれば一通り網羅できるはずだ。
ld.soあたりが気になるけど、そこは「ふつうのコンパイラを作る」を読み込む必要があるかも知れない。あとはBSD系のソースを調べるとか、それこそld.soのソースを追うとかしないとだけど・・・これはかなりエネルギーが入りそう。
最終目標はPHPに対してコマンドライン引数からシェルコードをexploitする事なんだけど、そのためにはシェルコードのexploitの基礎を勉強しておきたい。そのためにはある程度、「任意のバージョンのLinuxカーネルとglibcを自由に組み合わせて環境構築できる」ようになっておきたいので、スゴイ回り道をする事になる。
けどまぁ、これが出来るようになれば多分折り返し地点は過ぎていると思うので、マイペースで頑張ろう・・・。
しました。といってもCOFF Objectファイル特有の
位しかそもそも追加するものが無い。
近日中にCOFF .LIB ファイルダンプ用の機能を追加予定。
を5:5前後で適当に混ぜてみたら美味しいのではないかと思って作ってみた。
結果:まぁまぁ。ジンジャーのピリピリした炭酸がトマトジュースを引き締める。
かといってまた作ってみたいというほどでもない。
アルコールを加えカクテル風味にすればウケルかもしれない。飲みやすいことは確かだ。
それより、ジンジャーを空けた時に中身が炭酸の力で思いっきり吹き出してしまい、その後始末が手間だった。
Matt Pietrek氏のMicrosoft System Journalの記事で、次の2本をPDFに変換しました。
MSJのサイト、そのままだと印刷しづらいんですよね・・・。フォントは小さめだし一行の幅も狭くて印刷に優しくない。おまけにtableタグ使いまくりな昔のHTMLなので、CSS弄って一発修正!という訳にもいかない。
というわけで、OpenOffice Writerにコピペして適当に整形、PDFに変換しました。
著作権の問題もありますのでファイルは公開しません。欲しい方はmsakamoto-sfまでその旨メール下さい。
"/NODEFAULTLIB"リンカオプションを使うと、標準CRTをリンクしないようになる。
サイズの小さいEXEやDLL、あるいは標準以外のCRTを使いたい場合にこのオプションを使うことになるが、 C言語系/memos/VC++/09, スタック破壊の検出・防止("/GS", "/RTC", "/GZ") で取りあげたように "/GS" オプションがデフォルトで有効になっている為、Cookie値関連のシンボルが解決出来ずリンカエラーになる場合がある。
VC++では、コンパイラレベルでスタックの破壊を「検出」する為の補助機能を提供している。
スタックの破壊は、プログラムのバグや安全でない関数の使用などが原因となり発生する。
これら補助機能でスタックの破壊を「防ぐ」ことは出来ないが、破壊された事を「検出」するチャンスは得られる。
状況によっては補助機能による検出をすり抜けてしまう場合もあるが、最低限度の安全弁として活用していきたい。
なおバッファ本来の領域を越えてデータを書き込んでしまう現象には「オーバーラン」と「アンダーラン」の二種類がある。
x86ではアドレスの小さい方向にスタックが伸びるため、「オーバーラン」の方がスタックの破壊とそれに伴うセキュリティ問題の原因と成りやすい。
バッファ本来の領域を越えて、