2013-03-28 112 views
1
的內容

我分析拆解的DLL和卡住就行如何找出GDT

mov ebx,fs:[00000004h] 

我想找出寫入EBX與該數據的確切物理地址指令。 GDB告訴我,fs = 0x53.

我已經發現該地址取決於模式(受保護或實際),我敢肯定,CPU處於保護模式(見*)。所以段fs的開始應該存儲在GDT的某個地方,對吧?我也找到了GDT-register (0x009bd5c0007f)的地址,但gdb不允許我訪問或讀取寄存器,所以我不知道如何找出fs的物理地址(因此也就是fs:[00000004h])。

有人可以幫我嗎?

我使用指令smsw ax,之後eax是0x280031。所以最後一位是1,這意味着保護模式。我有沒有得到那個權利?

+0

呵呵?動態鏈接庫? – JosephH 2013-03-28 09:47:42

+1

如果這是32位代碼,它可能是從[TIB/TEB](http://en.wikipedia.org/wiki/Win32_Thread_Information_Block) – Michael 2013-03-28 10:00:49

回答

2

是的,它是保護模式。

而且您可能通過使用SGDT指令找到GDT的虛擬地址。

但是,該地址不太可能有用,因爲只能從OS內核中執行的代碼(可能是內核模式驅動程序)讀取該地址的內存。

您需要找到一種方法從內核中讀取感興趣的內存。

+0

聽起來像是超出了我的能力;-) – Nukualofa 2013-03-28 12:25:29

0

既然你提到一個DLL,我認爲它都在Windows上。在Windows上,已知FS指向線程信息塊(TIB)。在偏移量4處,有指向棧頂的指針。代碼將其加載到EBX,就是這樣。

FS的價值並不重要,你也不需要在GDT中徘徊。它是API的一個記錄部分。