我正在关注本教程: 在此处输入链接描述
虽然它使用 Olly,但我正在关注 IDA。
基本上,我想了解程序中发生弹出式决定的位置。我虽然在正确的位置放置了一个 BP。我不明白的是:当我在这个位置只放置一个 BP 时:
并且我运行调试器,它在这个 BP 上停止。我按 F8,它继续“推 esi”,按 F8,我得到了我正在寻找的弹出消息。
然而,当我在这个位置放置另一个 BP 时 - 这个是从使用 Olly 的教程中扣除的。
我遵循相同的调试程序;我按 F8,它继续“推 esi”,F8 并且它在新的 BP @0043F812 上弯下腰,只有在再次按 F8 后,我才会在它调用“DialogBoxParamA”后得到弹出窗口。
所以我的问题是,当我必须放置 1 个 BP 时,为什么我不能到达 DialogBoxParamA @43F818?如何从外部的“DispatchMessageA”跳转到@43F818?
我将尝试将其形象化:
无论 BP 的数量如何,我都不能遵循相同的轨迹吗?
下面是 2 个跟踪日志。1 - 只有 1 个 BP 的跟踪日志,这个非常好
Thread Address Instruction Result
00002378 .text:sub_442C44+2D4 Memory layout changed: 505 segments Memory layout changed: 505 segments
00002378 ST0=FFFFFFFFFFFFFFFF ST1=FFFFFFFFFFFFFFFF ST2=FFFFFFFFFFFFFFFF ST3=FFFFFFFFFFFFFFFF ST4=FFFFFFFFFFFFFFFF ST5=FFFFFFFFFFFFFFFF ST6=FFFFFFFFFFFFFFFF ST7=FFFFFFFFFFFFFFFF CTRL=FFFF CS=0023 DS=002B ES=002B FS=0053 GS=002B SS=002B EAX=00000000 EBX=00000000 ECX=741B2E09 EDX=00000000 ESI=0018E6C0 EDI=00000000 EBP=00000000 ESP=0018E6BC EFL=00200246 XMM0= XMM1= XMM2= XMM3= XMM4= XMM5= XMM6= XMM7= MXCSR=FFFFFFFF MM0= MM1= MM2= MM3=
00002378 .text:sub_442C44+2D4 call TranslateMessage; Call Procedure ECX=0018E6C0 EDX=0000000F ESP=0018E6C0 EFL=00200244
00002378 .text:sub_442C44+2D9 Memory layout changed: 522 segments Memory layout changed: 522 segments
00002378 .text:sub_442C44+2D9 push esi; lpMsg ESP=0018E6BC EFL=00200246
************* 2nd TRACE with 2 BP ****************
Thread Address Instruction Result
00002280 .text:sub_442C44+2D4 Memory layout changed: 505 segments Memory layout changed: 505 segments
00002280 ST0=FFFFFFFFFFFFFFFF ST1=FFFFFFFFFFFFFFFF ST2=FFFFFFFFFFFFFFFF ST3=FFFFFFFFFFFFFFFF ST4=FFFFFFFFFFFFFFFF ST5=FFFFFFFFFFFFFFFF ST6=FFFFFFFFFFFFFFFF ST7=FFFFFFFFFFFFFFFF CTRL=FFFF CS=0023 DS=002B ES=002B FS=0053 GS=002B SS=002B EAX=00000000 EBX=00000000 ECX=741B2E09 EDX=00000000 ESI=0018E6C0 EDI=00000000 EBP=00000000 ESP=0018E6BC EFL=00200246 XMM0= XMM1= XMM2= XMM3= XMM4= XMM5= XMM6= XMM7= MXCSR=FFFFFFFF MM0= MM1= MM2= MM3=
00002280 .text:sub_442C44+2D4 call TranslateMessage; Call Procedure ECX=0018E6C0 EDX=0000000F ESP=0018E6C0 EFL=00200244
00002280 .text:sub_442C44+2D9 push esi; lpMsg ESP=0018E6BC EFL=00200246
00002280 .text:sub_442C44+2DA call DispatchMessageA; Call Procedure ESP=0018E6B8
00002280 .text:DispatchMessageA jmp ds:__imp_DispatchMessageA; Indirect Near Jump
00002280 75FC7BBB
00002280 75FC7BBD Memory layout changed: 522 segments Memory layout changed: 522 segments
00002280 75FC7BBD ESP=0018E6B4
00002280 75FC7BBE EBP=0018E6B4
00002280 75FC7BC0 ESP=0018E6B0
00002280 75FC7BC2 ESP=0018E6AC
00002280 75FC7BC5 ESP=0018E6A8
00002280 75FC76D7 ESP=0018E6A4
00002280 75FC76D9 ESP=0018E6A0
00002280 75FC76DE EAX=0018E694 EBP=0018E6A4 ESP=0018E66C EFL=00200280 PF=0 ZF=0 SF=1
00002280 75FC76E3 EFL=00200246 PF=1 ZF=1 SF=0
00002280 75FC76E5
00002280 75FC76E8
00002280 75FC76EB
00002280 75FC76F2
00002280 75FC76F8 ECX=00B123FC
00002280 75FC76FA ZF=0
00002280 75FC76FC
00002280 75FC7702 EAX=00BB6A10 ECX=C0540000 EDX=00000000 EFL=00200200 PF=0
00002280 75FC7707 EBX=00BB6A10 EFL=00200202
00002280 75FC7709
00002280 75FC770B
00002280 75FC770D
00002280 75FC7713 EAX=00B123FC
00002280 75FC7715
00002280 75FC7717 EAX=00000113
00002280 75FC771A Memory layout changed: 527 segments Memory layout changed: 527 segments
00002280 75FC771A CF=1 SF=1
00002280 75FC771F
00002280 75FC788E CF=0 PF=1 ZF=1 SF=0
00002280 75FC7895
00002280 75FC789B CF=1 AF=1 ZF=0 SF=1
00002280 75FC78A0
00002280 75FC78A6 PF=0
00002280 75FC78AB
00002280 75FC7725 EDX=00000113
00002280 75FC7728 CF=0 PF=1 AF=0 ZF=1 SF=0
00002280 75FC772E
00002280 75FC792D EAX=00000000
00002280 75FC7930
00002280 75FC7932
00002280 75FC7740 EAX=00BB6A10
00002280 75FC7742 PF=0 ZF=0
00002280 75FC7744
00002280 75FC774A EDI=0018E6C8
00002280 75FC774D ECX=0000000A
00002280 75FC774F
00002280 75FC7752 EAX=0043F070
00002280 75FC7758 Memory layout changed: 527 segments Memory layout changed: 527 segments
00002280 75FC7758
00002280 75FC775B PF=1 ZF=1
00002280 75FC775F
00002280 75FC7765 PF=0 AF=1 ZF=0
00002280 75FC7768
00002280 75FC776E EAX=FFFFFED3
00002280 75FC7774 SF=1
00002280 75FC7777
00002280 75FC777D EAX=00000119
00002280 75FC7782 CF=1 PF=1
00002280 75FC7784
00002280 75FC778A EAX=0000000A
00002280 75FC778E EAX=00000001 CF=0 PF=0 AF=0 SF=0
00002280 75FC7791 EAX=FFFFFFFE
00002280 75FC7793 EAX=00000000 PF=1 ZF=1
00002280 75FC7796 ECX=00000000
00002280 75FC7798 PF=0 ZF=0
00002280 75FC779B
00002280 75FC779E PF=1 ZF=1
00002280 75FC77A0
00002280 75FC77A6 ESP=0018E668
00002280 75FC77A8 EAX=00BB6A38
00002280 75FC77AB ESP=0018E664
00002280 75FC77AC ESP=0018E660
00002280 75FC77AF ESP=0018E65C
00002280 75FC77B1 ESP=0018E658
00002280 75FC77B4 ESP=0018E654
00002280 75FC77B6 ESP=0018E650
00002280 75FC77B9 ESP=0018E64C
00002280 75FC77BF EAX=000B3E35 EBX=00000113 ECX=EED71FD0 EDX=00000072 ESI=00B123FC EDI=00000000 EBP=0018E5A0 ESP=0018C1C4 PF=0 AF=1 ZF=0
00002280 .text:sub_43F070+7A8 call **DialogBoxParamA**; Call Procedure EAX=0018BA94 ECX=00000000 EDX=00000001 EBP=0018BFF0 ESP=00189C28 EFL=00200200 AF=0
00002280 .text:sub_43F070:loc_43F81D Memory layout changed: 532 segments Memory layout changed: 532 segments
00002280 .text:sub_43F070:loc_43F81D cmp byte_4A6894, 0; Compare Two Operands