【问题标题】:Make a program using only system-calls not windows dll's [duplicate]仅使用系统调用而不是 Windows dll [重复] 制作程序
【发布时间】:2017-11-27 01:35:31
【问题描述】:

我正在尝试使程序使用系统调用而不是 dll (kernel32.dll,ntdll.dll)。
例如,我知道 Windows 10 64 位中的 0x2C (44) 系统调用是 NtTerminateProcess 购买 that 网页。此外,当我反汇编ntdll.dll 时,我发现了该代码:

NtTerminateProcess:
        mov r10, rcx
        mov eax, 44
        test byte [abs 7FFE0308h], 01h  ;also what is in that memory address?
        jnz label
        syscall
        ret    
label:  
        int 46 ;and why the 46 (the 2Eh windows NT interrupt) is here
        ret

我的问题是如何以这种方式终止程序?

【问题讨论】:

  • 这只是一个指示是使用syscall还是int的标志。您可能可以无条件地使用syscall。你试过了吗?你有什么问题吗?

标签: windows assembly dll exe system-calls


【解决方案1】:

直接进行系统调用不是一个好主意,因为这不是一个稳定的 ABI。理论上,这些数字可以在服务包甚至普通更新之间发生变化。

在 32 位 Windows 上使用的指令在所有系统上也不相同!

Windows NT 和 2000 始终使用int 2e。 Windows XP 在“较新”的 Intel/AMD CPU(Pentium II、AMD K7 和更高版本)上运行时开始使用 SysEnter/SysCall。因为 Windows XP 也支持较旧的 CPU,所以它使用了一个小帮助函数 (SystemCallStub) 来进入内核模式。此函数 (and later, the address of this function) 存储在内存页中,所有进程都可以访问该内存页,该内存页名为 _KUSER_SHARED_DATA,位于 0x7ffe0000。

仍然支持原来的int 2e 方法,但我不确定为什么 64 位 Windows 会费心检查使用哪种方法,因为它运行的每个 CPU 都支持SysCall。我的 Windows 8 机器不检查:

0:000> uf ntdll!NtTerminateProcess
ntdll!ZwTerminateProcess:
000007ff`1ad52ea0 4c8bd1          mov     r10,rcx
000007ff`1ad52ea3 b82a000000      mov     eax,2Ah
000007ff`1ad52ea8 0f05            syscall
000007ff`1ad52eaa c3              ret

无论如何,这些只是实现细节,它们可以随时更改。请参阅https://j00ru.vexillium.org/syscalls/nt/64/ 以获取按 Windows 内核版本细分的 x64 NT 系统调用号的逆向工程表。 (请勿在可移植代码中使用,仅用于满足您对 Windows 和/或 asm 工作原理的好奇心的实验。)

int 2e 可能会慢一点,所以如果你想保持“便携”,只需在 64 位代码中使用 SysCall 和在 32 位代码中使用 int 2e

【讨论】:

  • 好的,如果我只导入 ntdll.dll 并且只使用带有系统调用的函数(如 NtTerminateProcess),你能告诉我我如何制作 hello word 程序吗?
  • 制作“Hello world”程序需要控制台 I/O,最好的方法是使用 Kernel32.dll 提供的控制台库(特别是 WriteConsole 函数)。否则,您将大量重新发明轮子。如果你不得不问这个问题,可能不是你想要的。无论如何,编写非便携式控制台应用程序有什么意义? @阿里斯托斯
猜你喜欢
  • 2014-01-31
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 2013-03-16
  • 2016-01-13
相关资源
最近更新 更多