一起学习计算机第0007篇【UEFI中的句柄】-文件句柄

一起学习计算机第0007篇【UEFI中的句柄】-文件句柄

在用C语言编写 WINDOWS 的 SDK 程序的时候,经常会用到句柄。

当程序创建资源的时候,如果想在其它地方引用这个资源,一般的做法是使用这个资源所对应的句柄。

那么,句柄到底是什么呢?

很容易想到:在内存中创建资源之后,其首地址就固定了,所以,可以用其首地址当做句柄。

同样道理,在UEFI的编程中,也会有句柄这个概念。

还是用这汇编程序来讲解,如下:

mov [rsp+10h], rdx ;SystemTable

mov [rsp+8], rcx ;句柄ImageHandle

sub rsp, 28h

mov rax, [rsp+28h+10h]

mov rax, [rax+40h] ;ConOut

lea rdx, [szOK]

mov rcx, [rsp+28h+10h]

mov rcx, [rcx+40h] ;ConOut

call QWORD[rax+8] ;OutputString

xor eax, eax

add rsp, 28h

retn

程序中第2行,rcx是句柄。

这句柄是主板的固件程序加载这 efi 文件时,传来的。

如果仔细看这程序,会发现:这句柄在本程序中,没有使用。

因为:OutputString 函数并不需要句柄,但是,有的UEFI函数是需要句柄的。

所以,这句柄就是给调用这些函数准备的。

这个汇编程序从不同角度,讲解了好几遍。相信同学对这个汇编程序有一定的了解。

如果关于64位汇编的语法不清楚,请参考相关的大学计算机相关专业的教材,应该多少会有讲解的。

作者:UD64

2019年03月27日星期三下午

推荐阅读