169 похожих чатов

Блен, можете дать самый лучший гайд на практическую разработку прог?

Я задолбался рыться. Команд у процессора не так много, как мне получить к ним доступ без лабиринтообразных наворотов? Пока удобнее всего FASM, но я не знаю как из него пользоваться системными вызовами

18 ответов

27 просмотров

Я бы не был так уверен с выражением "инструкций у процессора не так много". Насчёт системных вызовов - syscall или int 0x2e (принято для x86), как и в любом другом ассемблере (компиляторе). Насчёт остального, нужно уточнять. Ибо неясно, что ты имеешь ввиду под "практической разработкой программ", и причём тут системные вызовы, когда можно использовать ring3

Pushok-Roflenko Автор вопроса
Boot Kit
Я бы не был так уверен с выражением "инструкций у ...

По сравнению с той тонной текста что я прочитал - немного. Тем более я явно не всё буду юзать https://en.wikipedia.org/wiki/X86_instruction_listings. Где мануал на этот syscall ? Где мануал на обращение к ring3/2? А что комп умеет? Выводить картинку, звук, память переписывать. На другие девайсы драверы писать пока не прошу.

Pushok Roflenko
По сравнению с той тонной текста что я прочитал - ...

Ты прчоитал только набор инструкций x86. А это далеко не все инструкции процессора. Есть ещё расширения SSE, x87, MMX Мануал на syscall? Копай в ядро. Находи номера системных функций, клади в EAX, аргументы в остальные регистры, в связи с соглашением о вызовах, и вызывай syscall. Мануал по обращениям к ring3? Это же банальщина. Хотя бы почитай про структуру PE. Функции GetProcAddress LoadLibraryA WinAPI. Структура импорт-таблицы выглядит так: section '.name' import readable dd 0, 0, 0, RVA kernel, RVA kernel_table dd 0, 0, 0, 0, 0 kernel_table: GetProcAddress dd RVA _GetProcAddress dd 0 _GetProcAddress: dw 0 db 'GetProcAddress', 0 kernel: db 'kernel32.dll', 0 Далее вызываешь по полученному от загрузчика из импорт-таблицы функции: call dword[GetProcAddress] Добавляешь туда ещё функции из ring3 библиотек (wininet.dll, ...) и используешь.

Boot Kit
Ты прчоитал только набор инструкций x86. А это дал...

Если хочешь укоротить код, используй включение в FASM win32a.inc Он позволяет делать так: library kernel32, 'kernel32.dll' import kernel32,\ function, 'function_name',\ ...

Pushok Roflenko
По сравнению с той тонной текста что я прочитал - ...

А, посмотрел - там перечислены и расширения. Но это не все. Укороченный список, поверь. Инструкции пополняются каждый год\два

Pushok-Roflenko Автор вопроса
Boot Kit
Ты прчоитал только набор инструкций x86. А это дал...

В какое ядро копать? Я понял шо в регистрах должны быть аргументы, не пойму где описано какие есть вызовы и что для них надо.

Pushok Roflenko
В какое ядро копать? Я понял шо в регистрах должны...

Это недокументированная часть. И тебе нужно уточнять, для какой именно сборки тебе нужны номера вызовов. Оно тебе надо? К тому же, много ты там не реализуешь. Они неудобные. Используй ring3. А номера системных вызовов для каждой сборки Windows можешь найти тут: https://j00ru.vexillium.org/syscalls/раздел/битность

Pushok-Roflenko Автор вопроса
Boot Kit
Если хочешь укоротить код, используй включение в F...

Меня вполне устраивает код без дополнительных макросов, и так башка забита.

Pushok Roflenko
Упс, страницы нет

Ты чего дерзкий такой. Внимательнее сообщение перечитай. Раздел и битность подставь. Для начала вообще ознакомься, какие есть разделы системных вызовов в ядре

Pushok Roflenko
Меня вполне устраивает код без дополнительных макр...

Ну так с включением меньше голова будет забита. Код меньше, удобнее, читабельнее. Впрочем, твоё решение

Pushok-Roflenko Автор вопроса
Boot Kit
Ну так с включением меньше голова будет забита. Ко...

Это если знаешь какие макро добавляет Win32, а у меня на него даже мануала нет. Я пытался его разобрать вручную, там какие-то трёхэтажные дефиниции. Системные вызовы все на j00ru?

Pushok Roflenko
Ща, я не очень быстрый

https://j00ru.vexillium.org/syscalls/nt/32/ номера системных вызовов для NT32 https://j00ru.vexillium.org/syscalls/nt/64/ номера системных вызовов для NT64 https://j00ru.vexillium.org/syscalls/win32k/32/ номера системных вызовов для Win32k 32 (GDI, графика) https://j00ru.vexillium.org/syscalls/win32k/64/ номера системных вызовов для Win32k 64 К слову, всё равно система будет прибегать к использованию callback от ring3 для использование win32k включительно. Так что от ring3 не убежать))

Pushok Roflenko
Это если знаешь какие макро добавляет Win32, а у м...

Да. Ну на гитхабе можешь ещё найти, если поискать в гугле. Но, в основном, они нигде не отличаются. Просто на j00ru они в удобном списке построены

Boot Kit
https://j00ru.vexillium.org/syscalls/nt/32/ номера...

Это я к тому, что если не подгружена библиотека GDI в процесс, использовать системные вызовы win32k не получится. Да и если не подгружен ntdll (что маловероятно, но всё же) использовать и NT системные вызовы тоже не получится. И отсюда вопрос - оно тебе надо? Ну ладно, размер инструкции syscall маленький, конечно. Но всё равно тебя преследовать будет удобный ring3

Pushok-Roflenko Автор вопроса
Boot Kit
Это я к тому, что если не подгружена библиотека GD...

Да я не пойму его удобности, мне надо на практике попробовать. Ты эту инфу где всю получал?

Pushok Roflenko
Да я не пойму его удобности, мне надо на практике ...

Сам ядро в своё время изучал. Тебе, кстати, этот сайтик ещё пригодится: https://www.vergiliusproject.com/kernels Там описаны структуры ядра Windows. В частности, я оттуда брал смещения для PEB, TEB и KUSER_SHARED_DATA. Ибо самому из WinDbg вытаскивать очень неудобно. Насчёт удобности - поймёшь. Ибо банальный MessageBox через системные вызовы сделать не получится

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта