Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何静态获取Windows系统调用程序集?_Windows_Assembly_Dll_Kernel - Fatal编程技术网

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

如何静态获取Windows系统调用程序集?,windows,assembly,dll,kernel,Windows,Assembly,Dll,Kernel,出于研究目的,我试图在Windows系统调用中找到一种特定的模式 到目前为止,我一直在研究Windows dll,如ntdll.dll、user32.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指令是链中的另一

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

到目前为止,我一直在研究Windows dll,如
ntdll.dll、user32.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
指令是链中的另一个网关,它最终会导致实际的程序集,但我想知道是否可以直接访问该程序集。

您在错误的
dll中查找。系统调用位于
ntoskrnl.exe

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

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()
中完成的,但您可以静态地跟踪它并进行所需的任何分析。

您是否尝试过使用调试器查看
fs:0ch
中的内容,然后反汇编该函数?这是wow过程(您使用64位窗口)。此代码进入x64门。你可以在WinDbg下这样做。在另一侧-已经是64位代码-
CpupReturnFromSimulatedCode
。可以阅读例如-@RbMm谢谢,这真的很有帮助!虽然I/O管理器的大部分工作在中,但创建或打开设备或文件的大部分工作在设备堆栈中的驱动程序和筛选器驱动程序的例程中。但这可能与OP的研究无关。