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

Как в отладчике происходит шаг (например с заходом). А тоесть,

как он выполняет всего одну инструкцию и сразу останавливает поток? Если взять windows, то он использует какие-то манипуляции с контекстом, через системные функции?

6 ответов

5 просмотров

Продолжает исполнение, проверяет (E/R)IP на то, не равен ли он следующей инструкции с предыдущей. Если равен, то останавливает С Step Into - продолжает исполнение, получает адрес функции, в которую нужно войти, и если указатель на адресе функции - останавливает. Тем самым попадаем внутрь

записывает опкод int 3(cc), на следующую за call инструкцию если с обходом, либо на адрес куда ведет call если с заходом. Когда исполнение доберется до этой точки проц сам через прерывание дернет отладчик.

randomize usr
записывает опкод int 3(cc), на следующую за call и...

Логично, хотя иногда не будет работать, если не пресечь стандартные методы обнаружения отладчика, или какого-нибудь дампа памяти И да - вот так реализовано как раз в x64dbg в классе TraceDebug - TraceExecute Но там уже в настройках ядра встроена галочка на спуфинг BeingDebugged, и восстановливания флага записи на память

nano- Автор вопроса
Entusiast
Логично, хотя иногда не будет работать, если не пр...

Блин сижу внутри функции TraceExecute и вижу фигу, одна обработка и нигде адресации до прерывания. Привык как в си углублятся внутрь функций пока не дойдешь до этого самого прерывания. Даже асемблер легче читается... Лан посплю и завтра доразбираю. Всеравно надо с++ учится понимать. Спасибо огромное👌🙃

nano
Блин сижу внутри функции TraceExecute и вижу фигу,...

Ну вот верное решение было - на следующую функцию int3 всунуть, продолжить, а Windows сам процесс остановит, потом восстанавливаешь байты, которые заменил

eflags | 0x100 же.

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

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

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
22
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Карта сайта