タグ

ブックマーク / hp.vector.co.jp (5)

  • Win32プログラミングノート

    主にMFCプログラミングのためのノートです コーディング 主にコーディングのためのノート。 非常にランダム。 VC++でUnicodeアプリケーションを作る Unicodeアプリケーションのビルド設定 文字・文字列列操作用マクロ 入力 ダイアログ中のエディットコントロールでタブキーを入力するためのハック モードレスダイアログから、メインウィンドウのキーボードアクセラレータを使えるようにする モードレスダイアログのメニューハンドラでコマンドアップデート機構を利用する MFCのコマンド処理機構を調べてみよう Visual C++の小技 コンパイラの小技、ヘルプの小技、リンカの小技、DLLの小技など オートリサイズ Raw Input XP Only MFCで多言語化 主に、リソースの多言語化。 デバイス デバイス変更通知を受け取る MFCのドキュメント・ビュー構造におけるオブジェクトの取得 M

  • Visual C++ の小技

    自分の書いたコードがどんな風にアセンブラに落ちているのか、確かめたくなることはありませんか? え、ない? ほんと? いや別にいいんですけど。 というわけで、コンパイル結果が気になるような人はたいていもう知っているはずなんですが、念のため。 一番簡単なのは、コンパイラにリスティングファイルを作らせることでしょう。 プロジェクトオプション、C/C++、リスティングファイルから指定できます。 出力結果は、中間オブジェクト出力先ディレクトリに a.cod とかで出てきます。 後は個人のお楽しみ。 普通にやると eip はインラインアセンブラでは取れませんが、次の関数を呼び出すことで取得できます。 LPVOID __declspec(naked) GetEip() { __asm mov eax, [esp]; __asm ret; } ↓の方で解説していますが、__declspec(naked)

  • NTネイティブなデバッガ

    NTネイティブなデバッガのテクニック。 デバッガは日々変更されつつあるので、ここで紹介したテクニックが使えなかったらごめん、ということで。 現在、おもいっきり工事中。 ntsd(あるいはcdb)は、ユーザモードで動作するデバッガです。 一方、kd はカーネルモードデバッガ。システムのほとんど全ての機能をデバッグすることができます。 別の言い方をすると、ntsd はアプリケーションデベロッパのためのデバッガ。 kd はシステムデベロッパ(ドライバなど)のためのデバッガ、とでも言えるでしょう。 ここでは、 MSDN などのような網羅的な解説は行いません。 知っていると便利、デバッグ生活をちょっと楽にしてくれるような、小手先テクニックを紹介していきます。

  • グローバルフックを使う

    フックには、スレッド固有のフックとグローバルなフックがありますが、今回はグローバルフックを使ってみます。 グローバルフックを使えば、ウインドウズがアプリケーションに送るメッセージを監視することができます。マウスカーソルを自動的に動かしたり、ボタンを勝手に押してくれるようなソフトもフックを使っていると思われます。 グローバルフックのフックプロシージャはDLLに置かないといけないので、グローバルフックを使うプログラムではDLLを作る必要が出てきます。また、DLLはアプリケーション1つにつき1つずつ読み込まれて、それぞれが独自のデータ領域を持つようなのですべてのDLLで共通に使用できる共有領域を作る必要があります。この領域には、フック プロシージャのハンドルを格納します。これを共有領域に置かないと複数のフックを組み込んだときにうまく動かないことがあります。 フックの種類 フックの種類を示します

  • 実行ファイルサイズを減らす

    窓プログラムをしていて どうして窓の実行ファイルはこんなにでかいんだ と思ったことはないでしょうか? ここでは、そんな悩みを制限付きですがかなえてみます。 まずは、その制限から 1.シングルスレッドプログラムである。 2.API以外は使わないほうがいい。使うとかなりサイズが増える。(stdio.hもだめ!) 3.VC++でしかできない(BC++での方法もあるけど少し難しい) この3つです。 まあ、1つ目の制限については、マルチスレッドプログラムはそう作らないと思うので殆ど問題はないと思います。 ただ、2つ目に関しては、DOS時代からCを使ってる人にはつらいかもしれません。 しかし、Cで出来たことはほとんどどAPIで出来るので、APIの勉強だと思って下さい。ただ、memcpyなどはAPIにない(CopyMemoryっていうのがあるが、あれは実はmemcpyを呼んでる)ので使わざるをえないです

  • 1