MyWackoSite : DmitryKolbin

Набор тестовых Win32 программ

Вам запрещён доступОписание
текущий набор задач использует следующие syscall'ы Вам запрещён доступNtCreateFile, Вам запрещён доступNtOpenFile, Вам запрещён доступNtWriteFile, Вам запрещён доступNtClose. Набор состоит из следующих программ:
create.exe — создает файл, используя ntdll.lib
create2.exe — создает файл, не используя ntdll.lib
writefile.exe — пишет в существующий файл в юникоде, используя ntdll.lib
writefile2.exe — пишет в существующий файл в юникоде, используя ntdll.lib
Примечание
  1. Так как создавались программы с минимальными зависимостями, пришлось отказать от libc, в следствии чего отсутствуют функции mainCRTStartup и подобные, которые являются настоящими точками входа в программу, точка входа в программу указывается с помощью опции /entry линкера.
  2. mainCRTStartup в libc организует передачу в main() аргументов командой строки.
  3. Передачи аргументов в данной реализации нет, для задания неоторых опций определены define'ы:
    • CREATING_FILE – файл, который создается программой create
    • WRITING_FILE – файл, в который пишет программа writefile
    • WRITE_WORD – слово, записываемое в WRITING_FILE

исходники, сборка

исходники
в папках 2003 и xp находятся библиотека ntdll для 2003 и xp версий Windows соответственно.

для сборки используется nmake:
можно указать в качестве цели одну из вышеперечисленных программ, тогда будет собрана только она.
var --один из вышеперечисленных define'ов, value — его значение.
очистка:
nmake /F makefile_xp clean
little hint по cl.exe и link.exe:

Примечание
Для вызова syscall'ов в программах без зависимости от ntdll используется инструкция sysenter архитектуры i686, её можно заменить, реализовав функцию _syscall@0 иначе чем в sysenter.asm

Программы для solaris

исходники
В данной реализации аргументы функций для пока что мнимых syscall'ов помещались так же как и в windows (cdecl соглашение), производятся два «мнимых» call'а — дважды помещается в стек регистр esp, затем в eax помещался номер syscall'а (использовались номера аналогичные win2003), а edx — текущее значение esp. Далее следует вызов sysenter.

Примечание

Ссылки