線程上下文資料結構

來源:互聯網
上載者:User

WINDOWS
中定義了一個CONTEXT
結構,該結構包含了特定處理器上的寄存器資料。系統使用CONTEXT
結構執行各種內部操作。目前,已經存在為Intel
、MIPS
、Alpha
和PowerPC
處理器定義的CONTEXT
結構。若要瞭解這些結構的定義,可以去看WinNT.h

該結構並沒有說明結構體內的成員,也沒有描述這些成員是誰,因為這些成員要取決於WINDOWS
運行在哪個平台上。在WINDOWS
定義的所有資料結構中,CONTEXT
結構是特定於CPU
的唯一結構。

 

在CONTEXT
結構中,它包含了主機CPU
上的每個寄存器的資料結構。在X86
電腦上,資料成員是EAX
,EBX
,ECX
,EDX
等等。如果是Alpha
處理器,那麼資料成員包括IntV0,IntT0,IntT1,IntS0,IntRa
和IntZero
等等。下面的代碼示範了X86 CPU
完整的CONTEXT
結構。

 

typedef struct _CONTEXT

{

    DWORD ContextFlags;

 

    //
調試寄存器

   DWORD Dr0;

   DWORD Dr1;

   DWORD Dr2;

   DWORD Dr3;

   DWORD Dr6;

   DWORD Dr7;

 

  //
浮點寄存器

   FLOATING_SAVE_AREA FloatSave;

 

//
棧寄存器

   DWORD SegGs;

   DWORD SegFs;

   DWROD SegEs;

   DWORD SegDs;

 

//
整型寄存器

   DWORD Edi;

   DWORD Esi;

   DWORD Ebx;

   DWORD Edx;

   DWORD Ecx;

   DWORD Eax;

 

//
控制寄存器

   DWORD Ebp;

   DWORD Eip;

   DWORD SegCs;

   DWORD EFlags;

   DWORD Esp;

   DWORD SegSs;

 

//
擴充寄存器

   BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];

}CONTEXT;

 

可以使用
BOOL GetThreadContext(HANDLE,PCONTEXT);
函數來取得一個線程的上下文。

ContextFlags
用於指定你關注此資料結構中哪些寄存器值。可以是如下定義

CONTEXT_CONTROL

CONTEXT_INTEGER

CONTEXT_SEGMENTS

CONTEXT_FLOATING_POINT

CONTEXT_DEBUG_REGISTERS

CONTEXT_EXTENDED_REGISTERS;

 

另外,在WinNT.h
中還定義了一個CONTEXT_FULL
定義如下

 

#ifdefine _X86

#define CONTEXT_FULL /

CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS

 

#endif

 

#ifdefine _ALPHA

 

#define CONTEXT_FULL / CONTEXT_CONTROL|CONTEXT_FLOATING_POINT|CONTEXT_INTEGER

 

#endif

 

 

同樣我們可以通過SetThreadContext(HANDLE,PCONTEXT);
來修改一個線程的寄存器值。步驟如下。

1、 

將要操作的線程掛起。

2、   

定義一個CONTEXT
結構變數,將其ContextFlags
初始化,標記你關注哪些值。

3、   

使用GetThreadContext
取得上下文。

4、   

修改你想修改的寄存器值。

5、   

用SetThreadContext
更新系統中線程的上下文。

6、   

喚醒線程

 

另外,對於指令指標和堆棧指標寄存器X86
和ALPHA
機器上是不一樣的。

X86
是EIP
和ESP
,而ALPHA
中是Fir
和IntSp
。在使用的時候,應該根據具體情況分析。。當然,上面的操作在一般的應用程式中不會使用。若你想編寫偵錯工具,調試器等才有可能用到。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.