0x01 调用门的基础知识
调用门执行流程
指令格式:CALL CS:EIP(EIP是废弃的)
执行步骤:
1) 根据CS的值 查GDT表,找到对应的段描述符 这个描述符是一个调用门.
2) 在调用门描述符中存储另一个代码段段的选择子.
3) 选择子指向的段 段.Base + 偏移地址 就是真正要执行的地址.
0x02门描述符
0x03 构造调用门
eq 8003f048 0040EC00`00081020
0x04 测试代码
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
void __declspec(naked) GetRegister()
{
_asm{
int 3
retf
}
}
int main(int argc, char* argv[])
{
char buff[6];
*(DWORD*)&buff[0] = 0x12345678;
*(WORD*)&buff[4]=0x48;
_asm{
call fword ptr[buff]
}
getchar();
return 0;
//return 0;
}
0x05 观察寄存器
查看 CS SS EIP ESP的变化
并观察内核寄存器的变化