【问题标题】:Decode sys calls?解码系统调用?
【发布时间】:2010-01-08 20:17:55
【问题描述】:

如何找出每个系统调用的编号?就像 SP3 上的 ZwCreateFile 是

ZwCreateFile: 移动 eax, 0x25 移动 edx, 0x7ffe0300 调用 [edx] retn 0x2c

你怎么知道ZwCreateFile是0x25?

【问题讨论】:

  • 这完全取决于您运行的操作系统
  • 标签显示 windows :P。 Windows 版本之间会有所不同吗?
  • 它当然可能不同,这是使用它们为您提供的功能的一个很好的理由。您想知道 ID 的愿望表明您将要做一些您可能不应该做的事情。
  • 虽然你不应该做的事情更有趣。
  • 逻辑不好!您不应该打开来自陌生人的电子邮件附件。好玩吗?

标签: c++ windows assembly


【解决方案1】:

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的信息。

【讨论】:

    【解决方案2】:

    让您的编译器生成一个 ma​​p 文件。 ma​​p 文件包含函数名称及其位置(偏移量、地址或两者)。在地图文件中搜索地址,您应该想出该地址的名称。

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

    再次,查阅您的地图文件。

    【讨论】:

    • 我不是在说地址。我说的是 ZwCreateFile 的系统调用 ID,在我的 Windows 版本上它是 0x25。
    猜你喜欢
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2014-12-25
    • 2019-08-04
    • 2020-05-18
    相关资源
    最近更新 更多