Расшифровать системные вызовы? - PullRequest
0 голосов
/ 08 января 2010

Как узнать, на какой номер звонит каждый sys? Как и в SP3 ZwCreateFile равен

ZwCreateFile:
    mov eax, 0x25
    mov edx, 0x7ffe0300
    call [edx]
    retn 0x2c

Как вы узнаете, что ZwCreateFile имеет размер 0x25?

Ответы [ 2 ]

3 голосов
/ 09 января 2010

Таблица системных вызовов Windows (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 

Вы можете легко обнаружить это для себя, сбросив таблицу системных вызовов nt!KiServiceTable, используя kd или WinDbg .

Информация с форумов Sysinternals .

0 голосов
/ 08 января 2010

Пусть ваш компилятор сгенерирует файл map . Файл map содержит названия функций и их расположение (смещения, адреса или оба). Найдите в файле карты адрес, и вы должны найти имя для этого адреса.

В вашем примере ZwCreateFile - это не 0x25. Процессор разыменовывает значение {pointer} в edx и использует это значение в качестве адреса для ZwCreateFile. Адрес ZwCreateFile не может быть получен на языке ассемблера, который вы разместили. Адрес ZwCreateFile хранится в местоположении 0x7ffe0300, которое должно быть инициализировано перед этим фрагментом языка ассемблера.

Опять же, обратитесь к файлу map .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...