ZwContinue 的疑惑

來源:互聯網
上載者:User

跟了個xx病毒,中間來了個int3,呵呵...
回頭看了看自己以前寫的SEH筆記(http://forum.eviloctal.com/viewthread.php?tid=31901),未果。

/////////////////////////////////////////////////////////////////////////////
from: http://www.xfocus.net/articles/200412/761.html
有點不同的是使用者態下的RtlDispatchException只判斷傳回值是ExceptionContinueExecution還是 ExceptionContinueSearch。若RtlDispatchException找到異常處理常式能夠處理異常,則調用 ZwContinue按照設定好的Context結構繼續執行,否則調用ZwRaiseException,並且把第三個布爾參數設為FALSE,表示進入第二次機會處理。
/////////////////////////////////////////////////////////////////////////////

相關結構:

NTSYSAPI
NTSTATUS
NTAPI
ZwContinue (
        IN PCONTEXT Context;
        IN BOOLEAN TestAlert
);

typedef struct _CONTEXT {

/*000*/ DWORD    ContextFlags;

/*004*/ DWORD    Dr0;
/*008*/ DWORD    Dr1;
/*00C*/ DWORD    Dr2;
/*010*/ DWORD    Dr3;
/*014*/ DWORD    Dr6;
/*018*/ DWORD    Dr7; 調試寄存器

/*01C*/ FLOATING_SAVE_AREA FloatSave ; 浮點寄存器區

/*08C*/ DWORD    SegGs;
/*090*/ DWORD    SegFs;
/*094*/ DWORD    SegEs;
/*098*/ DWORD    SegDs; 段寄存器

/*09C*/ DWORD    Edi;
/*0A0*/ DWORD    Esi;
/*0A4*/ DWORD    Ebx;
/*0A8*/ DWORD    Edx;
/*0AC*/ DWORD    Ecx;
/*0B0*/ DWORD    Eax; 通用寄存器

/*0B4*/ DWORD    Ebp;
/*0B8*/ DWORD    Eip;
/*0BC*/ DWORD    SegCs;
/*0C0*/ DWORD    EFlags;
/*0C4*/ DWORD    Esp;
/*0C8*/ DWORD    SegSs; 控制寄存器

/*0CC*/   BYTE   ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];

/*2CC*/ } CONTEXT;

注意下 /*0B8*/ 位置就是了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.