タグ

Windowsとインラインアセンブラに関するrti7743のブックマーク (2)

  • アレ用の何か

    概要 C++0x では関数の delete 指定によりnew演算子で割り当てられないようにすることも出来るらしいですが、その逆のお話。 コンパイル時ではなくランタイム時になりますが、コンストラクタでスタックの範囲を調べてその中に納まっていたら例外を発生させれば良いわけです。 スタックの範囲を取得する スタックの範囲は TIB とよばれるスレッド毎にもつ領域に納められています。TIB の中身は Windows のバージョンによって異なりますが最初の数バイトはどのバージョンでも共通で、その中にスレッドの範囲も収められています。 TIB の共通部分は WinNT.h で NT_TIB という名前の構造体で以下のように定義されています。 WinNT.h typedef struct _NT_TIB { struct _EXCEPTION_REGISTRATION_RECORD *Exception

  • SEH、構造化例外処理のテスト - hirdyの日記

    try ... catch() や __try ... __except() を使用できれば、そちらが簡単。 #include <stdio.h> #include <windows.h> LONG CALLBACK ExceptionHandler(EXCEPTION_POINTERS *ExceptionInfo) { printf("ExceptionHandler\n"); // c で次の命令へのアドレスを取得する方法が現在の所は不明。 ExceptionInfo->ContextRecord->Eip += 10; // 例外が発生した次の命令へ飛ばす return(EXCEPTION_CONTINUE_EXECUTION); } int main() { printf("null pointer exception\n"); SetUnhandledExceptionFilt

    SEH、構造化例外処理のテスト - hirdyの日記
    rti7743
    rti7743 2009/10/13
    例外をcatchを使わずに握りつぶす方法を探していたらたどり着きました。
  • 1