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