软件调试

Posted HEIS老妖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件调试相关的知识,希望对你有一定的参考价值。

 

单步:Flags寄存器中的标志位,CPU每执行一条指令后会检查IF位值。如为1则产生调试异常。

断点:使用INT 3替代目标指令头,执行时候则产生调试异常切换到调试器,而后返回时恢复

分支踪迹存储:记录最后一次JMP的地址,LastBranchRecording

系统中对对应的中断向量表,当中断产生时,PUSH现场,查询对应表中对应序号的地址,赋予CSIP,使之执行中断程序,而后恢复现场。表中包含了中断与异常(软中断)。

软件同时运行在用户空间、内核空间(前者主要包括CPUGPU计算,后者包括IO,系统时间等获取),故调试时候会发生模式切换:软中断与快速系统调用

快速系统调用软中断相似,跳过了执行中断前的一系列权限检查

用户态调试:调试器程序,被调试进程,调试子系统(事件驱动)

进程的虚拟内存空间:共享的系统内容与独立的进程内存

进程&线程:进程控制块/进程环境块;线程内核对象/线程环境块

 

栈与函数调用

每个线程都至少有一个栈,系统线程外的有两个栈:内核空间与用户空间

调用过程与约定

Push P1

Push P2

Call   Func1   // push IP   +  JMP Func1

Push BP

Push Var1

Push Var2

POP Var2, Var1, BP, IP, P2, P1

C约定调用,Pop P2, P1 caller执行,接受可变参数

标准调用,   callee销毁P2,P1;该过程指令不必反复出现在caller

快速调用,   部分参数通过寄存器传递,速度快

以上可能发生的溢出与下溢

堆的分配过程:

进程空间中的堆 -----堆管理器 ------内存管理器

堆器管理器维护着堆表,进程释放对空间时,返回给堆管理器(标为未使用);内存管理器为堆管理器请求分配内存空间

以上是关于软件调试的主要内容,如果未能解决你的问题,请参考以下文章

socket调试工具socket调试软件tcp调试工具tcp调试软件(sokit)

软件调试

软件调试和应用软件开发模式

Windows下软件调试

软件调试的方方面面

软考 系统架构设计师 简明教程 | 软件调试