如何静态获取Windows系统调用程序集?

时间:2017-12-03 13:13:46

标签: windows assembly dll kernel

我试图在Windows系统调用中找到一个特定的模式,用于研究目的。

到目前为止,我一直在研究诸如ntdll.dll, user32.dll之类的Windows dll,但这些似乎只包含用于准备跳转到系统调用的包装代码。例如:

mov     eax, 101Eh
lea     edx, [esp+arg_0]
mov     ecx, 0
call    large dword ptr fs:0C0h
retn    10h

我猜测call large dword ptr fs:0C0h指令是链中另一个最终导致实际装配的网关,但我想知道我是否可以直接进入该装配。

1 个答案:

答案 0 :(得分:3)

你正在寻找错误的dll。系统调用位于ntoskrnl.exe

如果您查看NtOpenFile()中的ntoskrnl.exe,您会看到:

mov     r11, rsp
sub     rsp, 88h
mov     eax, [rsp+88h+arg_28]
xor     r10d, r10d
mov     [r11-10h], r10
mov     [rsp+88h+var_18], 20h ; int
mov     [r11-20h], r10d
mov     [r11-28h], r10
mov     [r11-30h], r10d
mov     [r11-38h], r10d
mov     [r11-40h], r10
mov     [rsp+88h+var_48], eax ; int
mov     eax, [rsp+88h+arg_20]
mov     [rsp+88h+var_50], 1 ; int
mov     [rsp+88h+var_58], eax ; int
mov     [r11-60h], r10d
mov     [r11-68h], r10
call    IopCreateFile
add     rsp, 88h
retn

这是函数的真正主体。大多数工作都是在IopCreateFile()完成的,但您可以静态地进行操作并进行所需的任何分析。