Breakpoint hit什么意思 我用单片机调试时不断出现这句话,虽然不影响出结果

2024-04-28

1. Breakpoint hit什么意思 我用单片机调试时不断出现这句话,虽然不影响出结果

那是你程序里设置断点了,程序运行到断点处会出现该提醒,即遇到断点的意思。

Breakpoint hit什么意思 我用单片机调试时不断出现这句话,虽然不影响出结果

2. break与hit的区别是什么

break是打碎,指事物被打破。hit是撞击,主要是机体的撞击。

3. 如何使用windbg在驱动加载时下断

首先说说应用层的调试吧.当我们在调试windows可执行程序的时候,通过将PE文件头中的ImageBase和AddressOfEntryPoint相加,从而得出第一条指令的地址.针对这个地址下断之后目标程序就中断在了了入口处.但是这个方法在驱动调试的时候却有心无力.这是因为可执行程序都是首先被加载到各自的私有地址空间,他们不会有地址冲突.然而驱动程序运行在内核里面,所有的驱动程序共享一个地址空间.所以需要重新设定基地址.
1.利用bu命令下延迟断点.
之前提到过,bu可以针对符号下断点.这里是用bu下延迟断点的意义在于即使目标驱动没有被加载,windbg也允许我们针对符号设置断点.当新加载驱动程序后,windbg就会检查驱动程序中是否包含了设置了延迟断点的函数.如果找到了,就把断点替换为地址形式,然后再设置断点.笔者的测试驱动程序为TestDriver.sys.
[plain] view plaincopyprint?
0: kd> .sympath  
Symbol search path is: E:\Symbol\windbg Symbols;E:\Code\Vc_code\Ring3Ring0\Driver\objchk_wxp_x86\i386  
Expanded Symbol search path is: e:\symbol\windbg symbols;e:\code\vc_code\ring3ring0\driver\objchk_wxp_x86\i386  
0: kd> .srcpath  
Source search path is: E:\Code\Vc_code\Ring3Ring0\Driver  

在VMware客户机里,安装驱动后,敲下 net start TestDevice之后,系统理所应当的被断下来了.
[plain] view plaincopyprint?
Breakpoint 0 hit  
TestDriver!DriverEntry:  
f8c4ee10 8bff            mov     edi,edi  


假如我们调试的驱动并不是以DriverEntry作为入口函数,bu针对符号下断也就没有了意义.但是我们可以使用模块加偏移的方式下断.假设TestDriver的入口函数的偏移为0xFB4.直接bu TestDriver+0xFB4即可.
2.在系统调用DriverEntry之前下断.
现在来看看我们的程序,中断在了DriverEntry之中.我们能不能在进入DriverEntry之前下断.首先我们dv和esp看一下当前的栈
[plain] view plaincopyprint?
1: kd> dv  
  pDriverObject = 0x81f346e8  
  pRegistryPath = 0x81865000 "\REGISTRY\MACHINE\SYSTEM\ControlSet001\Services\TestDevice"  
         status = 0n8  
1: kd> r esp  
esp=f8af9c88  
1: kd> dd f8af9c88 L8  
f8af9c88  80582377 81f346e8 81865000 00000000  
f8af9c98  b2926cf4 00000000 00000018 00000000  

dv命令只显示了参数,还是用esp靠谱一点,至少给出了我们返回地址0x80582377.接下来该ln命令登场了
[plain] view plaincopyprint?
1: kd> ln 80582377  
(80581d0a)   nt!IopLoadDriver+0x66d   |  (80582442)   nt!IopLoadUnloadDriver  

返回地址位于nt!IopLoadDriver+0x66d处,直接反汇编一下吧,看看再哪里调用了DriverEntry
[plain] view plaincopyprint?
0: kd> bu TestDriver!DriverEntry  
0: kd> bl  
 0 eu             0001 (0001) (TestDriver!DriverEntry)  
1: kd> u nt!IopLoadDriver+0x660  
nt!IopLoadDriver+0x660:  
8058236a 8b7d80          mov     edi,dword ptr [ebp-80h]  
8058236d ffb570ffffff    push    dword ptr [ebp-90h]  
80582373 57              push    edi  
80582374 ff572c          call    dword ptr [edi+2Ch]  
80582377 3bc3            cmp     eax,ebx  
80582379 8b8d68ffffff    mov     ecx,dword ptr [ebp-98h]  
8058237f 8945ac          mov     dword ptr [ebp-54h],eax  
80582382 8901            mov     dword ptr [ecx],eax  
  
  
  
  
0x80582377处是nt!IopLoadDriver+0x66d.前面的call指令占了3个字节.所以我们下断在nt!IopLoadDriver+0x66a就能在进入DriverEntry之前中断下来.

3.使用事件异常
先来看看系统中提供了哪些事件异常吧.直接sx下
[plain] view plaincopyprint?
1: kd> sx  
  ct - Create thread - ignore  
  et - Exit thread - ignore  
 cpr - Create process - ignore  
 epr - Exit process - ignore  
 ld - Load module - output  
  ud - Unload module - ignore  
 ser - System error - ignore  
 ibp - Initial breakpoint - break  
 iml - Initial module load - ignore  
 out - Debuggee output - output  
这里我们要设置一下Load module事件为break, sxe -set enable        sxd - set disable               sxi -set ignore           sxn -set output


[plain] view plaincopyprint?
1: kd> sxe ld  
1: kd> sx  
  ct - Create thread - ignore  
  et - Exit thread - ignore  
 cpr - Create process - ignore  
 epr - Exit process - ignore  
  ld - Load module - break  
  ud - Unload module - ignore  
 ser - System error - ignore  
 ibp - Initial breakpoint - break  
 iml - Initial module load - ignore  
 out - Debuggee output - output  

加载我们的驱动吧,在load module的时候系统中断
然后我们找到模块基址,并在入口处下断即可.
[plain] view plaincopyprint?
1: kd> lm n  
start    end        module name  
[...]  
f8b9c000 f8b9d100   WMILIB   WMILIB.SYS    
f8b9e000 f8b9f580   intelide intelide.sys  
f8ba0000 f8ba1700   dmload   dmload.sys    
f8ba4000 f8ba5280   vmmouse  vmmouse.sys   
f8bb0000 f8bb1100   swenum   swenum.sys    
f8bb6000 f8bb7280   USBD     USBD.SYS      
f8bba000 f8bbbf00   Fs_Rec   Fs_Rec.SYS    
f8bbe000 f8bbf080   Beep     Beep.SYS      
f8bc2000 f8bc3080   mnmdd    mnmdd.SYS     
f8bc6000 f8bc7080   RDPCDD   RDPCDD.sys    
f8bf8000 f8bf9a80   ParVdm   ParVdm.SYS    
f8bfc000 f8bfde00   vmmemctl vmmemctl.sys  
f8c4e000 f8c4f300   TestDriver TestDriver.sys  
[...]  
解析一下pe文件
[plain] view plaincopyprint?
1: kd> !dh -a f8c4e000  
  
File Type: EXECUTABLE IMAGE  
FILE HEADER VALUES  
     14C machine (i386)  
       6 number of sections  
5077C38E time date stamp Fri Oct 12 15:15:26 2012  
  
       0 file pointer to symbol table  
       0 number of symbols  
      E0 size of optional header  
     102 characteristics  
            Executable  
            32 bit word machine  
  
OPTIONAL HEADER VALUES  
     10B magic #  
    9.00 linker version  
     C00 size of code  
     280 size of initialized data  
       0 size of uninitialized data  
    FB4 address of entry point  
     480 base of code  
         ----- new -----  
[...]  

然后bp TestDriver+0xFB4即可让系统中断在我们驱动程序的入口处.

如何使用windbg在驱动加载时下断

4. 单词辨析bump和hit有什么区别

bump  英 [bʌmp]  美 [bʌmp]

n. 肿块,隆起物;撞击  vi. 碰撞,撞击;颠簸而行  vt. 碰,撞;颠簸  adv. 突然地,猛烈地
hit  英 [hɪt]  美 [hɪt]

n. 打;打击;(演出等)成功;讽刺   vt. 打击;袭击;碰撞;偶然发现;伤…的感情
vi. 打;打击;碰撞;偶然碰上
两者的区别如下:
hit   普通用词,表示“撞击”时指有一定的速度撞击。
1)When the car hit the wall, the impact broke the windscreen.
车子撞到墙上,冲击力震破了挡风玻璃。
bump  意思与 hit 相似,侧重指无意间地或猛然地“碰撞”、“冲撞”,常用结构有:bump against、bump into。
1)He bumped his head on the low beams of the house.  他的头撞到了低矮的房梁上。
△ bump 作名词除了表示“碰撞”外,还可表示“隆起的包”。
1)She fell against our coffee table and got a large bump on her forehead.  她倒地时撞到我们的咖啡桌上,额头起了个大包。

5. crash与hit的区别

crash主要还是指汽车或者飞机的猛烈撞击(往往会带来事故)
  The jet crashed after take-off.
  He was drunk when he crashed the car.
  The plane crashed into a mountain.
  而hit是指普通的碰撞和撞击

crash与hit的区别

6. beat,attack,hit,strike有什么区别?

一、词性不同
1、beat的词性是动词、名词和形容词。
2、attack的词性是名词和动词。
3、hit的词性是动词(及物动词和不及物动词)和名词。
4、strike的词性是名词和动词。

二、词意不同
1、beat翻译是
v. 打;打败;跳动;敲打;战胜;n. 拍子;敲打;心跳声;adj. 精疲力尽的
2、attack
n. 攻击;抨击;v. 攻击;抨击;发动攻击;(疾病)侵袭
3、hit
vi. 打(击);袭击;达到;vt. 要求;打(击);碰撞;偶然发现;符合;n. 讽刺;打(击);冲撞;成功
4、strike
n. 罢工;打击;殴打;v. 打;撞;罢工;划燃
解析:beat指用棍、棒等连续击打;attack指的事前无警告甚至是无理由的攻击; hit指对准某一目标去“打”; strike指徒手或持物一次性地打击。

三、搭配侧重点不同
1、beat
1)用作不及物动词S+~(+A)
My pulse beats normally.
我脉搏正常。
2)用作宾补动词S+~+ n./pron. + n./adj.
They beat the silver thin.
他们把那块银打薄。
2、attack
1)用作及物动词S+~+ n./pron.
The enemy attacked us at night.
敌人在夜间袭击了我们。
3、hit
1)用作及物动词S+~+ n./pron.
The ball sprang back and hit him.
球弹回打在他身上。
4、strike
S+~+ n./pron. +(as) n./adj.
He strikes me as a conscientious man.
我感到他是一个认真负责的人。

7. popin中,Pop和Hit有什么区别,怎么区分两者,望高手讲解一下

Pop:肌肉震动,或称为爆点,Popping的首要元素,可以说Popping完全建立在pop的存在之上,pop需要相当的韵律感。理论上人体的所有肌肉都是可以通过意识控制其运动的,作为一个popper初期要学会大臂,小臂,手腕,腿,胸,肩,颈乃至背和胯部的pop,而popping高手能够pop的地方更多,甚至能控制某些部位的单块肌肉而不是肌肉群去pop。另外一个音乐里会有很多元素比如轻鼓、重鼓、Bass、Piano等,处理不用乐器时所用pop的强度和放松速度是不一样,所以说能够灵活运用身体的pop去处理音乐你的popping就已经很强了。 

Hit::与pop一样同样是通过对肌肉的收缩与放松来达到一种振动的效果,因而很多人很难区分pop与hit这两种元素。然而如字面意思一样,hit是击打,在放松状态下用肌肉的振动使肢体做出一种对触打某物的感觉,所以每一次hit完成后会停止下来就像碰触到某物一样。而pop则是在放松的状态下肌肉猛地用劲,当肌肉的运动达到最大幅度时并不是停止而是继续让运动自然结束。用某个popper的说法:hit就是pop加dimestop,虽然不一定完全准确但是也许更好理解一些吧。广泛使用Hit代替pop的风格被称为Hitting,一般公认最好的Hitting Style Popper是EB的Poppin Pete。

popin中,Pop和Hit有什么区别,怎么区分两者,望高手讲解一下

8. 求助,如何让windbg在初始断点之前,更早的断下来

  断点是认为加上的,程序执行到一个语句之前暂停下来的地方,断点对于软件调试来说是非常重要的,这一篇主要介绍使用windbg调试软件时,如何加断点。
  windbg命令
  bp+address/符号地址       在address指令处加断点,但是这个地址所在的模块必须已经被加载
  bu+address/符号地址        在address指令处加断点,但是这个地址所在的模块可以没有被加载,即延迟加载的模块。
  ba: 内存访问断点,当访问这个内存地址时(一般是数据),程序会断住。
  bl: 列出所有已经加载的断点和地址
  bc: 清理断点。 bc *,清理所有的断点。 bc 1,清理1号断点。
  bd: 使一个断点无效。
  be: 使一个断点有效,与bd左右相反。