Недавно я использовал много языков ассемблера в операционных системах * NIX. Мне было интересно о домене 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
Соглашение о вызовах в Windows:
???
Ссылка на все системные вызовы в Windows:
???
Неофициальный: http://www.metasploit.com/users/opcode/syscalls.html, но как я могу использовать их в сборке, если я не знаю соглашение о вызове.
ОФИЦИАЛЬНО:
- Если вы скажете, они не задокументировали это. Тогда как можно писать libc для Windows, не зная системных вызовов? Как собираются программировать Windows Assembly? По крайней мере, в программировании драйвера нужно знать это. не так ли?
Теперь, что происходит с так называемым Native API? Являются ли Native API
и System calls for windows
оба термина, относящиеся к одному и тому же? Чтобы подтвердить, что я сравнил их с двумя НЕОФИЦИАЛЬНЫМИ источниками
Системные вызовы: http://www.metasploit.com/users/opcode/syscalls.html
Native API: http://undocumented.ntinternals.net/aindex.html
Мои наблюдения:
- Все системные вызовы начинаются с букв
Nt
, где, поскольку Native API состоит из множества функций, которые не начинаются с буквNt
. -
System Call of windows
являются подмножествамиNative API
. Системные вызовы являются частью Native API.
Может ли кто-нибудь подтвердить это и объяснить.
EDIT:
Был еще один ответ. Это был второй ответ. Мне очень понравилось, но я не знаю, почему ответчик удалил его. Я прошу его передать ответ.