|
|
Другие темы раздела | |
FASM Вечная ошибка
https://www.cyberforum.ru/ fasm/ thread2339645.html Почему вылезает такая ошибка? перепробовала что могла, но я ничего не смогла =( |
Посимвольная очистка буфера клавиатуры FASM Помогите как сделать чтобы при нажатии backpace удалялся символ из буфера дальше продолжался ввод с этого места.format MZ mov ah, 0 mov al, 3 int 10h start: mov ax, 0b800h ; задаём адрес страницы mov es, ax ; помещаем его в сегмент mov ax, 0x0040 ; задаём адрес указателей mov fs, ax ; помещаем в сегмент |
FASM Очистка кольцевого буфера клавиатуры
https://www.cyberforum.ru/ fasm/ thread2339369.html Пытался работать с буфером клавиатуры, и совсем не могу его очистить по нажатию клавиши backspace. Пытался делать через приправнивание головы и хвоста mov ax, mov ,ax Но как то совсем не получилось. Вот мелкий код, в asm разбираюсь очень неочень, тапками сильно не бейте ^^" org 100h go: mov ah, 0 mov al, 3 int 10h mov ax, 0b800h |
FASM Рисование кривой линии при нажатой ЛКМ Сабж. Нужно отрисовывать кривую линию при нажатой ЛКМ. Видеорежим: 320х200 (13h). Беру координаты курсора с помощью функции 3h прерывания 33h (cx - x, dx - y). При зажатой ЛКМ отрисовка идёт почти как и надо, за исключением того, что есть небольшая область слева, в которой отрисовка не идёт совсем, и того, что по горизонтали линия начинает убегать от курсора. Читал, что в режиме 13h,... https://www.cyberforum.ru/ fasm/ thread2336098.html |
Работа с ОЗУ FASM Здравствуйте! При ассемблировании кода в строке: mov , bx Происходит ошибка: error: reserved word used as symbol. Как записать в память значение регистра bx? |
FASM Заполнение, обмен значений элементов массива. Ошибка при компиляции. Вот задание: Разработать и ввести исходный текст простейшей программы, которая 1) выводит на экран вашу фамилию; 2) резервирует память для таблицы элементов длиной равной 16 (N-номер варианта) со следующим типом элементов: четные варианты-байт; нечетные-слово (2 байта); 3) заполняет таблицу целыми числами, начиная с номера вашего варианта; 4) обнуляет элемент таблицы cо значением равным... https://www.cyberforum.ru/ fasm/ thread2317578.html |
FASM Parallel.For, хочу посоветоваться
https://www.cyberforum.ru/ fasm/ thread2284167.html Всем привет! Решил написать небольшой include для fasm под Windows, который будет позволять выполнять параллельные вычисления для for-циклов по аналогии с TParallel.For в Delphi или Parallel.For в C#, но без таких заморочек, как там, а что-то простенькое (строк на 500 асм-кода, ну может, чуть больше). Результат потом выложу. Кто не в теме – схема такая. Запускается функция инициализации,... |
Резидентный обработчик 21h прерывания (из 10-й главы Калашникова) FASM Имеется вот такой код резидентного обработчика прерываний, написанный предположительно на MASM данная программа должна после выполнения оставить часть себя в оперативной памяти подписать ее на прерывание 21h я изучаю ассемблер с компилятором FASM и не совсем могу понять реализацию данного примера по этому прошу помочь мне перевести этот код с MASM на FASM CSEG segment assume cs:CSEG,... |
FASM Чтение и запись файлов у меня возникла проблема с реализацией чтения файлов в сети полно примеров по этой теме, но в основном они написаны c под компиляторы MASM, NASM и пр., в то время как я использую FASM корень проблемы заключается в том что я не могу понять, как корректно объявить переменную-буфер в которую буду считывать файл в найденных мною примерах буфер объявлялся так Buffer equ $ или так Buffer DB... https://www.cyberforum.ru/ fasm/ thread2274156.html | FASM Резидентный обработчик: перехват нажатия "F1" и после этого запись в буфер клавиатуры символа "о" я пытаюсь разобраться с написанием обработчика и созданием резидентных программ на просторах сети нашел такой пример, который, по идее должен перехватывать нажатие "F1" и после этого записывать в в буфер клавиатуры символ "о" format mz jmp init old_09 dw 0, 0 new_09: push ax in al,60h cmp al, 3bh https://www.cyberforum.ru/ fasm/ thread2271116.html |
Как остановить кулеры? FASM Доброе время суток! Делаю программу на подобии SpeedFan, для остановки кулеров. Есть ли в Windows встроенный функции для работы с кулером? Какое делать прерывание? Где есть та функция, что управляет кулером? |
FASM Как подключить include к flat компилятору Здравствуйте,как подключить include к flat компилятору?Требуется подключить include 'win32a.inc' к проекту.win32a.inc лежит в папке "include" компилятора. https://www.cyberforum.ru/ fasm/ thread2265992.html |
Эксперт Hardware
|
|
0 | |
Пишем DLL на FASM'e - FASM - Ответ 1299924425.10.2018, 00:16. Показов 33947. Ответов 17
Метки (Все метки)
Всё описанное здесь - это личное видение, если не оговорено обратное. Если вас мучает вопрос: "Как создать DLL-библиотеку?", то вы пришли по адресу. Небольшой ликбез для новичков позволит разобраться с такими вопросами как:
Dynamic Link Library в простонародье DLL - часть исполняемого файла в виде внешнего модуля. Модуль представляет из-себя библиотеку уникальных процедур и функций, которых нет в составе системных WinAPI, но необходимых нашей программе. Разделение исполняемого файла на подгружаемые модули позволяет эффективно использовать память, т.к. услугами одной библиотеки могут пользоваться сразу несколько приложений. По своей природе, DLL не отличается от EXE.. те-же секции кода/данных/импорта, только добавляется ещё одна - секция экспорта, благодаря которой приложения могут импортировать из библиотеки имеющиеся в ней функции. Есть и ещё одно/важное отличие *dll от *exe - они не способны сами исполнять код, поскольку каждый участок обёрнут в отдельную процедуру. Эти процедуры просто ждут своего часа, пока exe-модуль (или другая dll) не запросит какую-нибудь из них. Системная поддержка и проецирование в память Когда система запускает юзерский процесс, ядро проделывает огромную работу. Помимо прочего, это выделение памяти для юзерской кучи TLS - Thread Local Storage, и создание в этой куче служебных структур типа PEB - Process Environment Block (блок окружения процесса), и дочернюю к РЕВ структуру TEB - Thread Environment Block (блок окружения основного потока). Это т.н. "процесс инициализации приложения", подготавливающий юзерский контекст и окружение. Занимается этим "загрузчик образа", который находится в Ntdll.dll. Поскольку процедура инициализации стартует до нашего приложения, алгоритм её действий остаётся для нас прозрачным. Однако после загрузки exe, в стеке кое-что остаётся и если прокрутить его в отладчике назад (в сторону меньших адресов), то можно найти там много интересного. Инструкции POP и RET не затирают данные в стеке, а просто смещают указатель ESP, в результате чего всё тайны всплывают наружу. Проделав глобальную работу, загрузчик приступает к разбору таблицы импорта нашего EXE-модуля, чтобы подтянуть в юзерскую память внешние библиотеки, динамически скомпонованные во время компиляции EXE. Каждая импортируемая DLL может иметь свою/собственную таблицу импорта, поэтому эта операция будет продолжаться в рекурсивном режиме до тех пор, пока не будет найден весь импорт. По мере загрузки каждой DLL, загрузчик будет сохранять её информацию в виде базы, в структурах PEB и TEB. В поисках библиотек, загрузчик сначала открывает в реестре ветку: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs где прописаны системные либы пользовательского режима. Если в таблице импорта нашего exe имеются и сторонние (по-факту самописные) dll'ки, то загрузчик ищет их в следующих директориях: 1. Текущий каталог, от куда запускается приложение; 2. C:\Windows\system32; 3. C:\Windows\system (для 16-бит приложений, но находит и 32-бит). Другими словами, мы можем располагать свои DLL в любую из указанных диров и загрузчик подхватит их на-лету, спроецировав на нашу память. Добавлено через 3 минуты База данных загруженных модулей Загрузчик ведёт список всех модулей, которые были загружены нашим процессом. Инфа хранится в структуре PEB, ..а именно в её подструктуре PEB_LDR_DATA. В ней загрузчик ведёт три списка 'list', в которых содержится одинаковые, но по разному выстроенные листы: по порядку загрузки(Load), по размещению в памяти(Memory) и в порядке инициализации(Init): Код
typedef struct _PEB_LDR_DATA { ULONG Length; BOOLEAN Initialized; PVOID SsHandle; LIST_ENTRY InLoadOrderModuleList; LIST_ENTRY InMemoryOrderModuleList; LIST_ENTRY InInitializationOrderModuleList; } PEB_LDR_DATA, *PPEB_LDR_DATA; Код
typedef struct _LDR_MODULE { LIST_ENTRY LoadOrderList ; см. PEB_LDR_DATA LIST_ENTRY MemoryOrderList ; ... LIST_ENTRY InitOrderList ; ... PVOID BaseAddress ; Базовый адрес загрузки в память PVOID EntryPoint ; Указатель на точку-входа в библиотеку ULONG SizeOfImage ; Её размер в памяти UNICODE_STRING FullDllName ; Полный путь к либе UNICODE_STRING BaseDllName ; Имя без пути ULONG Flags ; Атрибуты доступа SHORT LoadCount ; Важно! кол-во обращений к DLL SHORT TlsIndex ; Слот либы в юзерской куче LIST_ENTRY HashTableEntry ; Хеш для быстрого запуска/остановки ULONG TimeDateStamp ; } LDR_MODULE, *PLDR_MODULE; Посмотрим, чем занимается загрузчик на финальном этапе, после настройки окружения:
Добавлено через 1 минуту Точка входа в DLL-библиотеку Когда EXE-модуль вызывает какую-нибудь функцию из DLL, системный загрузчик прибегает к услугам API LdrLoadDLL() из либы ntdll. Эта-же API принимает управление от функций динамического вызова процедур LoadLibrary(), GetModuleFileName() etc, ожидающих получить дескрипторы модулей. Вот её прототип:Код
LdrLoadDll( IN PWCHAR PathToFile OPTIONAL, IN ULONG Flags OPTIONAL, IN PUNICODE_STRING ModuleFileName, OUT PHANDLE ModuleHandle ); DllEntryPoint() (аналог DllMain), которая по-факту является точкой-входа в любую библиотеку. Необязательная она тем, что мы можем игнорировать её аргументы и это не приведёт к краху. Однако чего нельзя ингорить, так это возвращаемое ею значение TRUE в регистре EAX, поскольку LdrLoadDLL() рассчитывает его получить. Ldr передаёт в DllEntryPoint() три аргумента в таком порядке, а обрабатывать их или нет - дело хозяйское, ..главное вернуть EAX=1: Код
DllEntryPoint ( ***IN HINSTANCE hinstDLL, ***IN DWORD fdwReason, ***IN LPVOID lpvReserved *);
fdwReason , который передаёт нам LdrLoadDLL(). Благодаря ему мы можем провести какие-нибудь подготовительные операции init, перед вызовом конкретной функции из нашей тушки. Но повторюсь, что никто нас к этому не принуждает и мы можем просто вернуть единицу и всё. Нужно сказать и о том, что Ldr ожидает TRUE только при обращение к DDL'ке с флагом 'DLL_PROCESS_ATTACH', а в остальных случаях возврат не критичен.Кроме этого нужно учитывать, что на входе либа ещё не определена, и фактически мы находимся внутри обработчика LdrLoadDLL(). Такая картина накладывает определённые ограничения на вызов некоторых/вложенных Win-API внутри DllEntryPoint(), пока не выйдем из точки-входа по RET. Не сбрасывайте это со-счетов! С деталями можно ознакомиться в статье КК: "Динамические библиотеки для гурманов" - http://citforum.ru/book/cook/dll1.shtml Вернуться к обсуждению: Пишем DLL на FASM'e FASM
3
|
25.10.2018, 00:16 | |
Готовые ответы и решения:
17
Обсуждение статьи "Пишем DLL на FASM'e" Пишем DLL для работы с регистром. Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями? |
25.10.2018, 00:16 | |
25.10.2018, 00:16 | |
Помогаю со студенческими работами здесь
0
Затупил, скажите где взять libmysqld.dll, libmysqld50.dll, libmysqld51.dll Сборка Qt: отучение Qt от mingw10.dll, libgcc_s_dw2-1.dll и других Qt***.dll Пишем патч на C++ Пишем брут Пишем поисковик ПИшем читалку |