Я ведь самоучка так что думаю C особо плюсав не пренесет по в плане монетизации, да и ассемблер мне нравиться - так что видно будет.
писать все коды на асме всё же глупо: он нужен лишь в особо критических местах. к примеру, в gcc развитый инлайн асм.
Эх если бы так просто было... Программа весела целый день в панели задач - проверял так стабильность. И вдруг решил запустить игру и поменять разрешения экрана в игре и тут вылет. Ну и вот и менял разрешение и так и этак запускал - не хочет повторяться. Я предполагаю что ошибка выскочила так как я не проверял что сообщение может быть меньше чем WM_MOUSEMOVE у меня было так(это само собой в хуке): Код (ASM): cmp esi,WM_MOUSEMOVE;esi = [!wParam] cmove eax,esp Поменял на : Код (ASM): cmp esi,WM_MOUSEMOVE;esi = [!wParam] cmovle eax,esp А в этом проблема или нет время пакажет --- Сообщение объединено, 1 фев 2019 --- Согласен не удобно, но для учебных целей и плюс мне он нравиться - думаю самое то для меня. А потом, когда наберусь знаний или за серьезное что-то возьмусь, то и перейду на C. После ассемблера, думаю сложностей особых с этим не будет.
UbIvItS, > не совсем понимаю каких знаний ты хочешь набраться Понятие как всё устроено на системном уровне. Вы изначальный вопрос помните, тс не отличает смещения от указателей и не может разобраться в нескольких элементарных структурах и механизмах. Си vs Asm это тема тёмная и смысла не имеющая, тут это просто упомянули в виде потока мыслей, точнее вы выбрали из этого потока.
В том смысле какие сообщения мышиные приходят? Если так то в свое время я этим уже занимался когда только разбирался как и что работает. Плюс там и логировать нечего что бы не быть многословным: Код (ASM): ;Просто движение мыши пропускаем однозначно;Меньше проверяем так как был один баг на переходах от мыши может сообщение отрицательное или еще что cmp esi,WM_MOUSEMOVE;esi = [!wParam] cmovle eax,esp ;Если не равно нулю значит пропускаем test eax,eax jnz LowLevelKeyboardProc.Skip sub esi,WM_LBUTTONDOWN ;Проверим если сообщение больше последнего обрабатываемого или меньше первого обрабатываемого - пропускаем cmp esi,WM_MOUSEHWHEEL - WM_LBUTTONDOWN ja LowLevelKeyboardProc.Skip jmp dword[.JmpTable+esi*4]; .JmpTable ddA .WM_LBUTTONDOWN;WM_LBUTTONDOWN ddA .WM_LBUTTONUP;WM_LBUTTONUP ddA LowLevelKeyboardProc.SkipUlock;WM_LBUTTONDBLCLK ddA .WM_RBUTTONDOWN;WM_RBUTTONDOWN ddA .WM_RBUTTONUP;WM_RBUTTONUP ddA LowLevelKeyboardProc.SkipUlock;WM_RBUTTONDBLCLK ddA .WM_MBUTTONDOWN;WM_MBUTTONDOWN ddA .WM_MBUTTONUP;WM_MBUTTONUP ddA LowLevelKeyboardProc.SkipUlock;WM_MBUTTONDBLCLK ddA .WM_MOUSEWHEEL;WM_MOUSEWHEEL ddA .WM_XBUTTONDOWN;WM_XBUTTONDOWN ddA .WM_XBUTTONUP;WM_XBUTTONUP ddA LowLevelKeyboardProc.SkipUlock;WM_XBUTTONDBLCLK ddA .WM_MOUSEHWHEEL;WM_MOUSEHWHEEL На эту таблицу больше ничего не должно вести, только если нету нигде в другом месте критической ошибки. --- Сообщение объединено, 1 фев 2019 --- Ну можно сказать Indy_ за меня уже ответил...
Релоки не меняют базу, а только правят абсолютные адреса. Базу меняет или упомянутый "ASLR" (Address Space Layout Randomization) рандомом выбирая один из 256-возможных вариантов базы, или при коллизии модулей - сам загрузчик образов. А в таблице релоков находятся только 12-битные фиксапы, которые корректируют адрес в пределах одной 4К-байтной страницы: 212=4096
Идея хорошая, но в данный момент нету смысла использовать в виду что баг повторить так и не удалось, так как не достаточно информации для этого. Если или когда появиться больше информации, тогда попробую логирование. А так понадеюсь, что все таки я исправил уже. --- Сообщение объединено, 2 фев 2019 --- В принципе я это и имел ввиду, только написал без знания подробностей.
Тред не читай @ Сразу отвечай Помимо известных входных параметров почти к любой проге прилагается и несколько неизвестных
_DEN_, если ошибка происходит за пределами проги, то конечно == к примеру, при большой загрузке винта может происходить сбой свопа. к чисто софтварным траблам можно отнести сбои при использование либ 3ей стороны. но в любом случае детальное логирование даёт возможность максимально сузить круг подозреваемых