<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Topics tagged with breakpoint]]></title><description><![CDATA[A list of topics that have been tagged with breakpoint]]></description><link>https://celua.ru/tags/breakpoint</link><generator>RSS for Node</generator><lastBuildDate>Wed, 17 Jun 2026 12:51:17 GMT</lastBuildDate><atom:link href="https://celua.ru/tags/breakpoint.rss" rel="self" type="application/rss+xml"/><pubDate>Invalid Date</pubDate><ttl>60</ttl><item><title><![CDATA[Большой брейкпоинт page exceptions]]></title><description><![CDATA[Наткнувшись на тему вспомнил, что  не все написал. В прошлом посте блога рассматривал бряк через DBVM.  К сожалению, та версия dbvm из поста блога пропускала очень много инструкций и практически смысла нет её юзать.  Например она определяла 16 инструкций, когда их было несколько тысяч, т.е. например 500 оффестов и на каждой по 10 инструкций. По DBVM надо, конечно, писать Дарк Байту, но желания нет.
Так вот. Не только с DBVM можно ставить бряки на участок памяти.  Есть еще тип  брейкпоинтов page exceptions. О нем давно-давно известно и он как на ладони, но почему-то я пропустил его, когда искал оффсеты в структурах

С ним можно работать с lua и без. Ловит огромное количество инструкций. Желательно мощное железо, т.к. игра скорее всего будет очень тормозить по 2-5 fps. Но на короткий запуск сойдет. 5 секунд и достаточно для снятия логов. На пару действий в игре тоже сойдет: выстрел или пермещение персонажа, прыжок или вообще ничего не делаем просто снимаем логи.

способ поставить бряк из окна памяти. Подопытная программа "Tutorial-x86_64.exe"



Здесь видно, что размер 720 байт

Логи из окна инструкций CE

1000259AE - 48 8B 00  - mov rax,[rax]
1000259C3 - 48 8B 00  - mov rax,[rax]
10001D70C - F7 40 50 10000000 - test [rax+50],00000010
10001D734 - 48 8B 00  - mov rax,[rax]
1000AAB40 - 48 83 78 70 00 - cmp qword ptr [rax+70],00
10001D809 - F7 40 50 10000000 - test [rax+50],00000010
10000D452 - 48 8B 0A  - mov rcx,[rdx]
10005AE70 - 83 40 68 01 - add dword ptr [rax+68],01
1000A4CF5 - F7 40 50 10000000 - test [rax+50],00000010
1000A4EB8 - 48 8B 00  - mov rax,[rax]
10000DA76 - 4C 8B 32  - mov r14,[rdx]
10005AE90 - 83 68 68 01 - sub dword ptr [rax+68],01
100139C13 - F7 40 50 10000000 - test [rax+50],00000010
100139C32 - 48 8B 48 60  - mov rcx,[rax+60]
100139C46 - 48 8B 40 60  - mov rax,[rax+60]
10009CEFB - 48 8B 00  - mov rax,[rax]
100098850 - 8B 80 80010000  - mov eax,[rax+00000180]
1000A4E81 - 81 88 00010000 00200000 - or [rax+00000100],00002000
1000A4E98 - 48 8B 00  - mov rax,[rax]
1000AD685 - F7 40 50 08000000 - test [rax+50],00000008
10009BFB8 - 8B 40 50  - mov eax,[rax+50]
10009816F - F7 40 50 08000000 - test [rax+50],00000008
100098236 - 48 8B 00  - mov rax,[rax]
10001BECE - 48 8B 00  - mov rax,[rax]
100098419 - F7 40 50 08000000 - test [rax+50],00000008
1000A2A28 - 48 8B 00  - mov rax,[rax]
1000A29F4 - 48 8B 12  - mov rdx,[rdx]
1000A4CC8 - 81 A0 00010000 FFDFFFFF - and [rax+00000100],FFFFDFFF
10001CC58 - F7 40 50 10000000 - test [rax+50],00000010
10000DB13 - 48 8B 00  - mov rax,[rax]
100095C65 - 48 8B 48 60  - mov rcx,[rax+60]
100095C75 - 48 8B 40 60  - mov rax,[rax+60]
10001CB04 - F7 40 50 10000000 - test [rax+50],00000010
10009BF35 - 8B 40 50  - mov eax,[rax+50]
10009932D - 48 8B 00  - mov rax,[rax]
10001F5C8 - F7 40 50 08000000 - test [rax+50],00000008
10001F638 - 8B 40 50  - mov eax,[rax+50]
100021803 - F7 40 50 08000000 - test [rax+50],00000008
100021923 - F7 40 50 08000000 - test [rax+50],00000008
10001ACB1 - 8B 41 50  - mov eax,[rcx+50]
10001B850 - 48 8B 48 60  - mov rcx,[rax+60]
10001B85C - 48 8B 40 60  - mov rax,[rax+60]
1000A2AC0 - 48 8B 00  - mov rax,[rax]
10013A2A3 - F7 40 50 10000000 - test [rax+50],00000010
10013A336 - 48 8B 00  - mov rax,[rax]
100098AC4 - 4C 8B 02  - mov r8,[rdx]
100098AD9 - 48 8B 00  - mov rax,[rax]
10013A35C - 48 8B 00  - mov rax,[rax]
10008A0C1 - 48 8B 00  - mov rax,[rax]
1000192A9 - 48 8B 12  - mov rdx,[rdx]
1000A3B99 - 48 8B 12  - mov rdx,[rdx]
100096636 - 8B 82 D0010000  - mov eax,[rdx+000001D0]
10008A0ED - 48 8B 00  - mov rax,[rax]
100097DF9 - 48 8B 00  - mov rax,[rax]
1000A4325 - 81 B8 80010000 FF7F0000 - cmp [rax+00000180],00007FFF
1000A6218 - F7 40 50 10000000 - test [rax+50],00000010
1000A6240 - 48 8B 00  - mov rax,[rax]
1000A6254 - 48 8B 00  - mov rax,[rax]
100097727 - 48 8B 48 60  - mov rcx,[rax+60]
100097733 - 48 8B 40 60  - mov rax,[rax+60]
10018E4D9 - F7 40 50 10000000 - test [rax+50],00000010
1000AA369 - F7 80 58010000 00400000 - test [rax+00000158],00004000
1000AA394 - 48 8B 00  - mov rax,[rax]
1000AA600 - 48 83 B8 B0020000 00 - cmp qword ptr [rax+000002B0],00
100097E3B - 48 8B 00  - mov rax,[rax]
1000A74A9 - 48 8B 00  - mov rax,[rax]


Способ через Lua (подробнее в документации)

debug_setBreakpoint(structure_address, sizeMemory, bptAccess, bpmException, onBreakpoint)

P.S. Я написал про два способа установки брейкпоинта на множество адресов без DBVM. Вручную можно ставить такие брейкпоинты, но дальше уже кропотливый просмотр на предмет того чем это может помочь. Это может помочь определить типы данных и помочь прикинуть размер структуры, а также найти активные оффсеты. Можно на Lua автоматически определять активные offsets по базовому адресу структуры и эту структуру создать и заполнить в dessectData. Если будет время напишу скрипт.
]]></description><link>https://celua.ru/topic/69/большой-брейкпоинт-page-exceptions</link><guid isPermaLink="true">https://celua.ru/topic/69/большой-брейкпоинт-page-exceptions</guid><dc:creator><![CDATA[MasterGH]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Сделать большой брейкпоинт на структуру через  dbk_useKernelmodeOpenProcess]]></title><description><![CDATA[Пользователь @Pitronic написал в Сделать большой брейкпоинт на структуру через dbk_useKernelmodeOpenProcess:

Мы знаем что адрес таймера на выстрел во первых лежит в одной структуре с патронами, во вторых адрес в начале меняется в момент выстрела одновременно с уменьшением патронов и в пределах от одной до 100 миллисекунд возвращается в прежнее значение. может lua скрипт специальный можно сделать?

Я бы сделал без скриптов.

делаешь dessect structure

Далее как обычно. Создаешь структуру. Затем вот это (следить за изменениями)

ну а дальше воспроизводишь свой выстрел
потом создаешь структуру из изменившихся данных (потому что их будешь очень много наверняка)

затем делаешь lock на структуру, чтобы значения зафиксирвать

затем рядом создаешь второй ряд по ctrl +a и смотрим изменения в реальном времени (игра должна быть в оконном режим, чтобы мы видели как цифры скачут)

чтобы увидеть изменения менее 100мс нужно поставить интервал меньше


По идее это должно сработать
]]></description><link>https://celua.ru/topic/25/сделать-большой-брейкпоинт-на-структуру-через-dbk_usekernelmodeopenprocess</link><guid isPermaLink="true">https://celua.ru/topic/25/сделать-большой-брейкпоинт-на-структуру-через-dbk_usekernelmodeopenprocess</guid><dc:creator><![CDATA[MasterGH]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Медленный брейкпоинт]]></title><description><![CDATA[Если условный брейкпоинт очень часто выполняется и это приводит к очень сильным тормозам, то есть пара приемов

Сделать АА скрипт, который проверяет условие

cmp eax, [АДРЕС]
jne x1
nop  // здесь поставить на код брейкпоинт без условия
x1:
// здесь оригинальный код


На инструкции проходит очень много адресов и окно с определяемыми адресами виснет.
Теоретическое решение. Сделать АА скрипт, который через alloc() создаст блок памяти (буфер) для будущих адресов и их счетчиков. Через второй АА код сделать инъекцию, которая во время игры в буфер будет записывать не повторяющиеся адреса и повторяющиеся счетчики.

Чтобы просмотреть результат можно зайти в MemoryView — просмотр памяти в CE.
Области памяти также можно сравнивать в "Dessect Data" окне
]]></description><link>https://celua.ru/topic/22/медленный-брейкпоинт</link><guid isPermaLink="true">https://celua.ru/topic/22/медленный-брейкпоинт</guid><dc:creator><![CDATA[MasterGH]]></dc:creator><pubDate>Invalid Date</pubDate></item></channel></rss>