4.9 使用debug跟踪exe程序执行过程 您所在的位置:网站首页 如何查看exe文件的代码是什么 4.9 使用debug跟踪exe程序执行过程

4.9 使用debug跟踪exe程序执行过程

2024-06-15 08:57| 来源: 网络整理| 查看: 265

 

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 实验室设备网 版权所有