Ку всем. Вопрос мой на сегодня таков: поддерживает ли Ольга цепочки точек останова по условию? Скажем, есть у нас одна важная условная точка. А чуть ниже есть ещё пяток, которые должны останавливать выполнение только в том случае, если было соблюдено условие на останов у самой-самой первой точки. При этом, к моменту достижения каджой из этих пяти, все «маркеры» первичного условия (в моём случае, наличия в EDX указателя на строку "l:\scorpc\game\barrel.0") уже перезаписаны. А, ну и ещё, хотелось бы заиметь руководство по синтаксису условных точек останова. Гугл на запрос "ollydbg conditional bp syntax" выдаёт в основном результаты с "syntax highlighting". В общем-то, сабж.
Можно. Скрипт там есть. Я так делал, но давно и всё забыл. Вот в скрипте windbg такое замутить - это да, проблема, но тоже можно. Там в Olly доках на весь скрипт - один файлик его описание. Почитай.
все в манах есть. причем избыточно. Код (Text): 0:000> bp kernel32!CreateFileW "du poi(@esp+4);kv;gu;? @eax; g" тащемта показываем первый параметр и щито функа возвращает. а в индексе хелпа по виндбг помимо conditional breakpoints еще и conditional execution есть Код (Text): 0:000> bp `mysource.cpp:143` "j (poi(MyVar)>0n20) ''; 'gc' "
sn0w Дак речь то не об этом. gu только ещё один бряк на адрес возврата ставит и всё. А цепочка где? А я допустим так хочу: брякаюсь на kernel32!CreateFileW пока имя файла не будет "file.txt", а только после этого брякаюсь на WriteFile, а бряк на kernel32!CreateFileW в это время уже снят. В олли я делал такую цепочку на 19 бряков. Каждый следующий бряк снимает предыдущий.
На коленке за две минуты собирается надстройка, которая сделает то, что вам нужно. Ты пойми друг, что отладчика бывает не достаточно.
Благодарю всех за ликбез! Текущую проблему, правда, уже обошёл, отследив область памяти, куда пишется строка, однако на будущее будет полезно. Ушёл раскуривать odbgscript.
)) а я виндебаговский это время курил - может понадобится - по поводу бряка на нужный файл. потенциал у виндбага конечно просто зверский, но и глаза режет от обилия команд, расширений итд. script.wds Код (Text): .block { r $t1 = poi(@esp + 4) as /mu ${/v:fnamestr} @$t1 .if ($scmp("${fnamestr}", "test.txt") = 0) { .printf "\n>>> CreateFileW hits required arg (%p) %mu. Setting BP to WriteFile...\n", @$t1, @$t1 gu r $t2 = @eax bc* bp kernel32!WriteFile ".if (poi(@esp + 4) == @$t2) {.echo >>> WriteFile hits required handle; bc*} .else {gc}" .printf ">>> Ok hit f5 to continue!\n" } .else { gc } } HANDLE file2 = CreateFileW(L"xuita.txt", GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,0); HANDLE file = CreateFileW(L"test.txt", GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,0); чето башка кругом пошла - на ксунте срабатывает а не на указанной в скрипте testтхт. кто что посоветует? 0:000> bp kernel32!CreateFileW " $$>a<d:\\testlib\\debug\\script.wds" *** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Windows\syswow64\kernel32.dll - 0:000> g ModLoad: 7d910000 7d970000 C:\Windows\SysWOW64\IMM32.DLL ModLoad: 70990000 70a5c000 C:\Windows\syswow64\MSCTF.dll *** WARNING: Unable to verify checksum for testlib.exe >>> CreateFileW hits required arg (0041584c) d:\xuita.txt. Setting BP to WriteFile... >>> Ok hit f5 to continue! eax=0000005c ebx=7efde000 ecx=7efdd000 edx=000000b7 esi=0018fe40 edi=0018ff30 eip=0041192a esp=0018fe40 ebp=0018ff30 iopl=0 nv up ei ng nz ac po cy cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000293 testlib!main+0x3a: 0041192a 3bf4 cmp esi,esp 0:000> g >>> WriteFile hits required handle eax=0018ff28 ebx=7efde000 ecx=0000005c edx=0018fde8 esi=0018fe40 edi=0018ff30 eip=7dd71282 esp=0018fe28 ebp=0018ff30 iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246 kernel32!WriteFile: 7dd71282 8bff mov edi,edi
sn0w Не годится. Если цепочка длиннее 2 бряков, что для каждого бряка по скрипту. В олли можно обойтись одним скриптом. В виндбг на самом деле тоже: Код (Text): .prompt_allow -reg -src +ea +sym +dis as xe "bc *; ad *" as x6 "bp kernel32!virtualprotect 5 ${xe}; g" as x5 "p 13 ${x6}" as x4 "t ${x5}" as x3 "pa 103c27c1 ${x4}" as x2 "t ${x3}" as x1 "pa 103eb213 ${x2}" as x0 "t ${x1}" bu anype+1ea093 x0 Это пример из жизни, там и бряки и трассировка. Запускаеться скрипт только "$<script.txt" вот так. Запись скрипта в одну строчку через ";" не годиться. Если кому не понятно - скрипт читать с конца - сначала сработет bu anype+1ea093, потом 1 шаг трассировки t, потом трассируем до pa 103eb213. И так далее. Кто знает варианты проще, без извратов, пожалуйста отпишитесь.