Условные точки останова Windbg игнорируют само условие

Я отлаживаю приложение без исходников, в качестве отладчика использую IDA PRO + Windbg. Я пытаюсь перехватывать вызовы CloseHandle с конкретным значением дескриптора, например handle=0x14

Я поставил условную точку останова так:

bp kernel32!CloseHandle "j (poi(@esp+4)=0x00000014) ''; 'gc'"

Точки останова устанавливаются нормально, но они прерываются при каждом вызове CloseHandle, вопреки тому, что я пытаюсь разорвать, только если первый аргумент равен 0x14


person YakibutaRamen    schedule 27.09.2017    source источник
comment
вам нужно условное равенство == не одно =   -  person blabb    schedule 27.09.2017


Ответы (1)


у вас отсутствует = оператору условного равенства нужно два == а не один =

0:000> bp kernel32!CloseHandle ".if(poi(@esp+4)!=0xcc) {? dwo(@esp+4);gc}.else{? dwo(@esp+4);.echo our handle;gc}"
0:000> g

Evaluate expression: 60 = 0000003c
Evaluate expression: 56 = 00000038

Evaluate expression: 204 = 000000cc <------
our handle <-------------

Evaluate expression: 200 = 000000c8    
Evaluate expression: 256 = 00000100   
Evaluate expression: 272 = 00000110    
Evaluate expression: 280 = 00000118    
Evaluate expression: 308 = 00000134
Evaluate expression: 312 = 00000138
Evaluate expression: 308 = 00000134
Evaluate expression: 324 = 00000144
Evaluate expression: 328 = 00000148
Evaluate expression: 324 = 00000144
person blabb    schedule 27.09.2017