首页
社区
课程
招聘
[旧帖] [原创][原创]学习windows系统调用 0.00雪花
发表于: 2013-11-5 23:18 6571

[旧帖] [原创][原创]学习windows系统调用 0.00雪花

2013-11-5 23:18
6571

老掉牙的话题了,不过这是学习研究系统的基础。
简单的说说windows系统调用,我们编写win32程序的时候为了完成特定的功能就要去调用win32应用程序接口,就是win32 API,windows通过win32 API调用界面所定义的库函数,这些函数基本上都是系统dll中导出的,然后调用流程一直往系统底层走,知道通过某些特殊的命令进入内核进而完成系统调用,当然不是每一个API都能进入系统调用流程。

这里以ReadFile函数作为研究对象,这个API是kernel32导出的,通过windbg跟踪调用可以直白的看出函数内部调用了NtReadFile,内涵源代码提供了NtReadFile函数,但是用户空间的程序是不可能直接调用内核函数的,其实这个NtReadFile是用户空间提供的一个函数。

以NtReadFile为例:

lkd> u ntdll!ntreadfile
ntdll!NtReadFile:
7c92d9b0 b8b7000000      mov     eax,0B7h
7c92d9b5 ba0003fe7f      mov     edx,offset SharedUserData!SystemCallStub (7ffe0300)
7c92d9ba ff12            call    dword ptr [edx]
7c92d9bc c22400          ret     24h
7c92d9bf 90              nop
lkd> dd SharedUserData!SystemCallStub
7ffe0300  7c92e4f0 7c92e4f4 00000000 00000000
7ffe0310  00000000 00000000 00000000 00000000
7ffe0320  00000000 00000000 00000000 00000000
7ffe0330  fb1fc0d5 00000000 00000000 00000000
7ffe0340  00000000 00000000 00000000 00000000
7ffe0350  00000000 00000000 00000000 00000000
7ffe0360  00000000 00000000 00000000 00000000
7ffe0370  00000000 00000000 00000000 00000000
lkd> u 7c92e4f0 
ntdll!KiFastSystemCall:
7c92e4f0 8bd4            mov     edx,esp
7c92e4f2 0f34            sysenter
ntdll!KiFastSystemCallRet:
7c92e4f4 c3              ret
7c92e4f5 8da42400000000  lea     esp,[esp]
7c92e4fc 8d642400        lea     esp,[esp]
ntdll!KiIntSystemCall:
7c92e500 8d542408        lea     edx,[esp+8]
7c92e504 cd2e            int     2Eh
7c92e506 c3              ret
[摘自windows内核情景分析代码-reactOS]
ULONG_PTR NTAPI KiLoadFastSyscallMachineSpecificRegister(IN ULONG_PTR Context)
{
  //设置MSR寄存器
  //CS被设置成0x8, 那么SS就是0x8+0x8 = x010
  Ke386Wrmsr(0x174, 0x8, 0);
  //ESP被设置成一个中立的不属于任何线程的堆栈,作为过渡的系统空间堆栈
  Ke386Wrmsr(0x175, (ULONG)KeGetCurrentPrcb->DpcStack, 0);
  //EIP设置为系统快速调用总入口KiFastCallEntry
  Ke386Wrmsr(0x176, (ULONG)KiFastCallEntry, 0);
  Retun 0;
}
lkd> u nt!kifastcallentry
nt!KiFastCallEntry:
8053e540 b923000000      mov     ecx,23h
8053e545 6a30            push    30h
8053e547 0fa1            pop     fs
8053e549 8ed9            mov     ds,cx
8053e54b 8ec1            mov     es,cx
8053e54d 8b0d40f0dfff    mov     ecx,dword ptr ds:[0FFDFF040h]
8053e553 8b6104          mov     esp,dword ptr [ecx+4]
8053e556 6a23            push    23h
lkd> !idt 3
Dumping IDT:
03:  8053f6e4 nt!KiTrap03

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 5
支持
分享
最新回复 (21)
雪    币: 25
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
快成正式会员了,加油~~还有,建议试试dds指令~
2013-11-6 10:39
0
雪    币: 0
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
汇编语言还没学习,看来是要学习汇编语言了!
2013-11-6 10:51
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
正在  学习驱动,有帮助,学习了
2013-11-6 16:14
0
雪    币: 85
活跃值: (51)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
很不错的文章,以问题引出知识点,让人不知不觉进入其中
2013-11-6 22:55
0
雪    币: 41
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
好厉害的样子
2013-11-7 10:40
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
又是反编译分析,看不懂啊
2013-11-7 13:06
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼主这样的贴子,给我的感觉就是,能看懂的不用你那篇贴子人家也知道,看不懂的你这样写人家还是看不懂。难道就不能详细点,将相关的技术点所涉及的概念以及具体语句介绍一下么?象这种记流水账一样的帖子我是看不懂。
2013-11-7 14:53
0
雪    币: 43
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
还是要学习汇编
2013-11-8 12:37
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼主用的是windbg , 为什么我的windbg使用!idt , !pcr 命令却找不到结果: No export pcr found 我的系统是win7 64位。
2013-11-9 11:15
0
雪    币: 59
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
看不懂汇编,但是支持下
2013-11-9 16:06
0
雪    币: 29
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
好的,谢谢指导
2013-11-10 00:40
0
雪    币: 29
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
多谢指导哈
2013-11-10 12:09
0
雪    币: 29
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
这个可以边看反汇编代码边学习
2013-11-10 12:11
0
雪    币: 29
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
多谢大哥鼓励啊
2013-11-10 12:15
0
雪    币: 29
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
发此贴的时候比较匆忙,而且涉及的点比较多。小弟谨记教诲,下次一定发更高质量的帖
2013-11-10 12:16
0
雪    币: 29
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
符号加载了吗,reload一下吧
2013-11-10 12:17
0
雪    币: 0
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
恩恩,正在学习。
2013-11-10 22:45
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
正在努力爬进中
2013-11-13 00:22
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
看不太懂。
2013-11-13 09:33
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
看不懂,都是怎么学习的
2013-11-13 14:37
0
雪    币: 29
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
将理论作为基础,多动手就好
2013-11-13 21:05
0
游客
登录 | 注册 方可回帖
返回
//