最近我一直在使用大会语言*尼克斯的操作系统。我想知道有关windows域。


呼吁《公约》在linux:

mov $SYS_Call_NUM, %eax
mov $param1 , %ebx
mov $param2 , %ecx
int $0x80

这就是它。这是我们应该如何做一个系统调在linux。

参考系统的所有呼吁在linux:

关于美元SYS_Call_NUM&哪些参数我们可以使用这个参考: http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html

官方参考: http://kernel.org/doc/man-pages/online/dir_section_2.html


呼吁《公约》在窗口:

???

参考系统的所有呼吁在窗口:

???

非官方的: http://www.metasploit.com/users/opcode/syscalls.html 但我如何使用这些中大会除非我知道这个叫公约》。

官方:???

  • 如果你说,他们没有记录在案。然后是如何一个会写的libc windows不知道系统的电话?怎么是一个要做Windows会编程?至少在驾驶员编程人需要知道这些。对吗?

现在,怎么了与所谓的本地API?是 Native API & System calls for windows 两者都不同的条款参照同样的事情吗?为了确认我比较了这些从两个非官方消息来源

系统调用: http://www.metasploit.com/users/opcode/syscalls.html

本机API: http://undocumented.ntinternals.net/aindex.html

我的意见:

  1. 所有系统通话开始用字母 Nt 其中作为本机API组成的大量职能不是开始用字母 Nt.
  2. System Call of windows 是的子集 Native API.系统调用的司机。

任何一个可以确认和解释。

编辑:

还有另一个答案。这是一个2的答复。我真的很喜欢它但是我不知道为什么回答者已被删除。我请求他重新发布他的回答。

有帮助吗?

解决方案

如果你这样做会编程在窗户你不做手册系统调用.你使用NTDLL和地API以为你做的。

本机API是一个简单的包装的那么边的事情。它所做的是执行一个系统调用于正确的。

你应该永远不需要手动系统调用所以你的整个问题是多余的。

Linux的系统调用的代码不改变,Windows做,这就是为什么你需要的工作,通过一个额外的抽象层(又名NTDLL).

编辑:

此外,即使你的工作在大会一级,你还有完全进入Win32API,没有任何理由可以使用的NT API开始!进口、出口等所有工作只是现在大会的程序。

EDIT2:

如果你真的想要做手册系统调用,你会需要反NTDLL为每个相关的Windows的版本,加版的检测(通过苯),并执行一个系统调用查找针对每一呼吁。

然而,那将是愚蠢的。NTDLL是有原因的。

人们已经完成的逆向工程的部分:看看 https://j00ru.vexillium.org/syscalls/nt/64/ 对一个表格的系统-电话号码的每个窗户内核。(注意,后面行做变化之间甚至版本的Windows10。) 再次,这是一个糟糕的想法以外的个人使用的唯一实验在你自己的机器了解更多有关汇编和/或Windows内部。不内联的系统调入的代码分发给其他任何人。

其他提示

其他的事情你需要知道的有关windows系统调用《公约》是,据我了解的系统调用表格产生的部分作为建立过程。这意味着他们可以简单地改变-没有人跟踪他们。如果某人增加一个新的名单的,它并不重要。NTDLL仍然有效,所以其他人的电话NTDLL仍然有效。

甚至本机构用于执行系统调用(其int或sysenter)不是固定在石头,并有改变过去,我认为,一旦在一个时间相同版本的windows用不同的Dll其使用不同的条机制取决于CPU在机。

窗系统的电话是执行通过调入系统Dll如 kernel32.dllgdi32.dll, ,这样做是与普通的子程序的呼吁。该机制陷入OS特权阶层是无证件的,但这是好的,因为Dll喜欢 kernel32.dll 为你做这个。

并且通过系统电话,我指的记录Windows API入境点喜欢 CreateProcess()GetWindowText().设备的司机通常将使用一个不同的API从窗户信息适.

我很感兴趣,这样做windows API呼吁在大会没有进口(作为一种教育活动),因此我写了以下FASM会做什么NtDll!NtCreateFile。这是一个粗糙的示范,在我的64位版本的Windows(Windows10 1803版10.0.17134),以及它提出之后打电话,但返回值的系统调用为零,所以它是成功的。一切都设置了每Windows64呼吁《公约》,然后系统中的呼号是装入RAX,然后是系统调用大会的指示运行的电话。我的例子创建文件c:\HelloWorldFile_FASM,因此具有可运行的"作为管理员"。

format PE64 GUI 4.0


entry start


section '.text' code readable executable


 start: 
 ;puting the first four parameters into the right registers

                            mov rcx, _Handle
                            mov rdx, [_access_mask]
                            mov r8, objectAttributes
                            mov r9, ioStatusBlock

 ;I think we need 1 stack word of padding:

                            push 0x0DF0AD8B


 ;pushing the other params in reverse order:

                            push [_eaLength]
                            push [_eaBuffer]
                            push [_createOptions]
                            push [_createDisposition]
                            push [_shareAcceses]
                            push [_fileAttributes]
                            push [_pLargeInterger]

 ;adding the shadow space (4x8)

 ;                               push 0x0
 ;                               push 0x0
 ;                               push 0x0
 ;                               push 0x0

 ;pushing the 4 register params into the shadow space for ease of debugging

                            push r9
                            push r8
                            push rdx
                            push rcx

 ;now pushing the return address to the stack:

                            push endOfProgram

                            mov r10, rcx ;copied from ntdll!NtCreateFile, not sure of the reason for this
                            mov eax, 0x55
                            syscall

 endOfProgram:
                            retn




 section '.data' data readable writeable

 ;parameters------------------------------------------------------------------------------------------------

 _Handle                         dq      0x0
 _access_mask                    dq      0x00000000c0100080
 _pObjectAttributes              dq      objectAttributes        ; at 00402058
 _pIoStatusBlock                 dq           ioStatusBlock
 _pLargeInterger                 dq      0x0
 _fileAttributes                 dq      0x0000000000000080
 _shareAcceses                   dq      0x0000000000000002
 _createDisposition              dq      0x0000000000000005
 _createOptions                  dq      0x0000000000000060
 _eaBuffer                       dq      0x0000000000000000       ; "optional" param
 _eaLength                       dq      0x0000000000000000

 ;----------------------------------------------------------------------------------------------------------


                            align   16
 objectAttributes:
 _oalength                       dq      0x30
 _rootDirectory                  dq      0x0
 _objectName                     dq           unicodeString
 _attributes                     dq      0x40
 _pSecurityDescriptor            dq      0x0
 _pSecurityQualityOfService      dq      securityQualityOfService


 unicodeString:
 _unicodeStringLength            dw      0x34
 _unicodeStringMaxumiumLength    dw      0x34, 0x0, 0x0
 _pUnicodeStringBuffer           dq      _unicodeStringBuffer


 _unicodeStringBuffer            du      '\??\c:\HelloWorldFile_FASM'       ; may need to "run as adinistrator" for the file create to work.



 ioStatusBlock:
 _status_pointer                 dq      0x0
 _information                    dq      0x0


 securityQualityOfService:
 _sqlength                       dd      0xC
 _impersonationLevel             dd      0x2
 _contextTrackingMode            db      0x1
 _effectiveOnly                  db      0x1, 0x0, 0x0

我用的是文件Ntdll!NtCreateFile,我也使用核debugger来看待和复制多的参数。

__kernel_entry NTSTATUS NtCreateFile(
  OUT PHANDLE                      FileHandle,
  IN ACCESS_MASK                   DesiredAccess,
  IN POBJECT_ATTRIBUTES            ObjectAttributes,
  OUT PIO_STATUS_BLOCK             IoStatusBlock,
  IN PLARGE_INTEGER AllocationSize OPTIONAL,
  IN ULONG                         FileAttributes,
  IN ULONG                         ShareAccess,
  IN ULONG                         CreateDisposition,
  IN ULONG                         CreateOptions,
  IN PVOID EaBuffer                OPTIONAL,
  IN ULONG                         EaLength
);

官方调《公约》在窗口: http://msdn.microsoft.com/en-us/library/7kcdt6fy.aspx

(希望这个链路存在的未来;如果不是,只要搜索"64软件公约"在MSDN).

功能呼吁《公约》的不同之处在Linux和Windows x86_64.在这两个ABIs、参数是最好通过注册,但登记册使用的不同而不同。更多的Linux ABI可以发现在 http://www.x86-64.org/documentation/abi.pdf

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top