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

标签 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 指令是链中的另一个网关,最终通向实际的程序集,但我想知道是否可以直接到达该程序集。

最佳答案

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

关于windows - 如何静态获取Windows系统调用程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47618740/

相关文章:

php - 我只想在 Windows 的命令行中运行 PHP。如何开始?

ruby-on-rails - 如何在 Windows 上安装 RedCloth?

c# - 将具有非托管导出的 C# DLL 加载到 Python 中

windows - 使用批处理文件和 Sqlcmd 进行错误处理

windows - 存在什么解决方案来运行在 Windows 中具有安装向导的应用程序的安装

c - 为什么同一程序中同一 C 循环的相同副本会花费明显但始终不同的时间来执行?

linux - Scanf 汇编中的 char 指针

c - 我如何在 C 中执行这些 asm ROR 和 BT/RCR 操作?旋转或从另一个数字向内移动一点

c++ - 减少我的 boost lib 文件夹

c++ - 强制所有符号从链接的 lib 文件导出到 DLL