2021 03 21 呼叫門 下

2021-10-22 18:55:43 字數 1665 閱讀 8984

void __declspec(naked) getregister()

}

上面的**在前文**現過,通過呼叫門提公升到了0環許可權後執行。

真正起作用的是 mov eax,0x8003f00c、mov ebx,[eax]、mov dwh2**alue,ebx、sgdt gdt。

其中 sgdt gdt的sgdt並不是讀取gdt表,而是讀取gdtr這個暫存器。

sgdt這個指令通常是給作業系統軟體使用的,但是如果要在應用層去使用它,也不會導致異常。

也就是說 sgdt gdt 這條**在3環沒有提權的情況下也是可以使用的。

前文提到過呼叫門的門描述符s位必須為0,當它為0的時候才能說明是乙個系統段描述符,而不是**段/資料段描述符,且type位為1100才是乙個呼叫門。

0040ec03`00081030:3個引數。

}注意:當使用有引數的呼叫門,引數是需要自己壓棧的,如**中壓入了1、2、3,然後才呼叫。當通過呼叫門,許可權不變的時候,會 push 兩個值:cs、返回位址。新的cs的值由呼叫門決定。

當通過呼叫門,許可權改變的時候,會 push 四個值:ss(原來的堆疊段選擇子)、esp(原來的棧頂)、cs(原來的段選擇子)、返回位址。新的cs的值由呼叫門決定,新的ss和esp由tss提供。

通過呼叫門呼叫時,要執行哪行**由呼叫門決定,但使用 retf 返回時,由堆疊中壓入的值決定。也就是說:進入時只能按照固定路線行動,離開時可以翻牆(只要改變堆疊裡面的值就可以前往任意地方)。

可不可以再建立乙個門出去呢?也就是使用 call。答案是可以,前門進後門出。

思考一:

**論證中的** pushad、pushfd、popad、popfd有必要嗎?

思考二:

**論證中的以下**中標紅的部分讀取引數為什麼要這麼寫呢?

mov eax,[esp+0x24+0x8+0x8]

mov dword ptr ds:[x],eax

mov eax,[esp+0x24+0x8+0x4]

mov dword ptr ds:[y],eax

mov eax,[esp+0x24+0x8+0x0]

mov dword ptr ds:[z],eax

2021 03 21學習記錄

接收請求的引數7.建立springmvc的配置檔案 spring的配置檔案一樣 1 宣告元件掃瞄器,指定 contorller註解所在的包名 2 宣告視 析器。幫助處理檢視的。處理器方法的返回值表示請求的處理結果 1.modelandview 有資料和檢視,對檢視執行forward。2.string...

專案bug記錄 20210321

oracle 使用update更新關聯表有時候卡殼 專案操作oracle資料庫,在linux系統理,使用sqlplus呼叫oracle的storeproduce,遇到卡殼 update 關聯表有時候卡殼 update nvi dcs ucv 202101 t1 set t1.th ilp aum s...

Jupyter Notebook 快速入門(下)

高階單元格操作,將讓編寫 notebook 變得更加方便。舉例如下 記住這些操作,它們可以幫助你節省許多時間。我們再來看看 markdown 單元格。雖然它的型別是 markdown,但是這類單元格也接受 html 這樣,你就可以在單元格類實現更加豐富的樣式,新增,等等。例如,如果想在 notebo...