长调用与短调用 调用门

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
cs里的是一个段选择子
1:拆分段选择子,查GDT表
2:该段描述符为系统描述符,s位为0,TYPE为1100,是一个门描述符(DPL必须为3,不然该描述符的权限检查过不去)
3:该描述符的16到31位为另外一个段描述符的选择子(决定是否提权)

门描述符

在这里插入图片描述
当段描述符是门描述符时,高16位与低16位组成一个32的地址。是程序通过门后代码执行的地址。16到31位是一个段选择子,决定是否提权。

自己实现调用门

//读取高地址的值
#include "stdafx.h"
#include <windows.h>
int a=0;

void _declspec(naked) test()
{

_asm
{
  pushad
  pushfd
  mov eax,0x8003f048 
  mov ebx,[eax]
  mov a,ebx
  popfd
  popad
  retf
}


}

int main(int argc, char* argv[])
{
	char buffer[6]={0};
    *(DWORD*)&buffer[0]=0;
    *(DWORD*)&buffer[4]=0x4b;

_asm
{
  call fword ptr [buffer]
}
    printf("a=%x\n",a);
	getchar();
	return 0;
}

构造一个门描述符写入GDT表 。
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41490873/article/details/88263741