4.9 使用debug跟踪exe程序执行过程 | 您所在的位置:网站首页 › 如何查看exe文件的代码是什么 › 4.9 使用debug跟踪exe程序执行过程 |
Dos在运行一个程序的时候,是由command将程序从可执行文件中加载入内存,并使其得以执行。这个过程我们无法追条指令地看到程序的执行过程,因为command的程序加载,设置CS:IP指向程序的入口的操作是连续完成的,而当CS:IP一指向程序的入口,command就放弃了CPU的控制权,CPU立即开始运行程序,直至程序结束
如果解决这样的矛盾,debug! Debug可以将程序加载入内存,设置CS:IP指向该程序的入口,但Debug并不放弃对CPU的控制,这样我们就可以使用Debug的相关命令来单步执行程序,查看每一条指令的执行结果。 assume cs:abc abc segment start: mov ax,2 add ax,ax add ax,ax mov ax,4c00H int 21H abc ends end start
CX通用寄存器存放了程序的长度。1.exe中程序的机器码共有12个字节。则1.exe装载后,cx中的内容为000CH 程序被装入内存的什么地方?到哪查看它的内容? exe文件中程序的加载过程 分析 1. 程序加载后,ds中存放着程序所在内存区的段地址,这个内存区的偏移地址为0,则程序所在的内存区的地址为ds:0; 2. 这个内存区的前面256个字节中存放的是PSP,DOS用来和程序进行通信。从256字节处向后的空间存放的是程序。 所以从ds中可以得到PSP的段地址SA,PSP的偏移地址是0,物理地址为SA*16+0 因为PSP占256字节,程序的物理地址为 SA*16+0+256=SA*16+16*16+0=(SA+16)*16+0 可用段地址和偏移地址表示为:SA+10H:0 所以在前面的图中,cs=075A,ds=076A 在执行完int 21指令后,cs的内容便取了一个其他的数值了,这是因为它调回了command.com程序(这里实际是DOSbox)了
|
CopyRight 2018-2019 实验室设备网 版权所有 |