加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactos操作系统实现(151)

发布时间:2020-12-15 04:59:15 所属栏目:百科 来源:网络整理
导读:图形模块包括用户模式 gdi32 和内核模式的 win32k , gdi32 的代码在目录 reactos/dll/win32/gdi32 里, win32k 的代码在目录 reactos/subsystems/win32/win32k 里。所有客户端的应用程序都是调用 gdi32 库里的 API 函数,编译时也是连接这个库里的函数。由

图形模块包括用户模式gdi32和内核模式的win32kgdi32的代码在目录reactos/dll/win32/gdi32里,win32k的代码在目录reactos/subsystems/win32/win32k里。所有客户端的应用程序都是调用gdi32库里的API函数,编译时也是连接这个库里的函数。由于gdi32的代码是在用户模式下的,那么它是怎么样去访问内核提供的功能呢?其实它在编译时,会调用一个工具去分析内核的函数代码,然后生成一个汇编文件,连接到gdi32里,这个文件名称是reactos/obj-i386/lib/win32ksys/win32k.S。它是每次编译时自动生成的,里面的代码就是一些模板的代码,然后设置每个内核函数访问的编号,把参数传送进去和参数返回,就实现相应的内核功能调用了。在文件里的调用代码如下:

这行是声明一个函数。

.global _NtGdiExtTextOutW@36

_NtGdiExtTextOutW@36:

这里是把API的编号移到EAX寄存器。

movl $0x1092,%eax

这里是获取共享系统调用代码的指针。

movl $KUSER_SHARED_SYSCALL,%ecx

这里是调用系统功能调用的函数,可以是中断0x2E,也可以是sysenter,syscall等系统调用。

call *(%ecx)

ret $0x24

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读