解码sys调用?

时间:2010-01-08 20:17:55

标签: c++ windows assembly

您如何找出每个系统调用的号码?就像SP3上的ZwCreateFile一样

ZwCreateFile:
    mov eax, 0x25
    mov edx, 0x7ffe0300
    call [edx]
    retn 0x2c

你怎么知道ZwCreateFile是0x25?

2 个答案:

答案 0 :(得分:3)

Windows System Call Table (NT/2000/XP/2003/Vista)表示NtCreateFile(与ZwCreateFile功能相同,请参阅MSDN以及其他许多内容)

      Windows NT          Windows 2000         Windows XP     W2K3    Vista
SP3  SP4  SP5  SP6  SP0  SP1  SP2  SP3  SP4  SP0  SP1  SP2  SP0  SP1  SP0
0x17 0x17 0x17 0x17 0x20 0x20 0x20 0x20 0x20 0x25 0x25 0x25 0x27 0x27 0x3b 

您可以使用kdWinDbg转储系统调用表nt!KiServiceTable,轻松发现这些内容。

来自Sysinternals forums的信息。

答案 1 :(得分:0)

让编译器生成 map 文件。 映射文件包含函数名称及其位置(偏移量,地址或两者)。在地图文件中搜索地址,您应该为该地址找到一个名称。

在您的示例中,ZwCreateFile不是0x25。处理器取消引用edx中的 {pointer} 值,并将该值用作ZwCreateFile的地址。无法从您发布的汇编语言中获取ZwCreateFile的地址。 ZwCreateFile的地址存储在0x7ffe0300位置,该位置必须在此汇编语言片段之前初始化。

再次,请参阅地图文件。