源代码编译和调试共40页文档
- 格式:ppt
- 大小:2.59 MB
- 文档页数:40
C>EDIT MYFILE.ASM<CR>C>MASM MYFILE.ASM<CR>Microsoft (R) Macro Assembler Version 5.10Copyright (C) Microsoft Corp 1981,1988.All rights reserved.Object filename [MYFILE.OBJ]: <CR>Source listing [NUL.LST]: MYFILE.LST<CR>Cross-reference [NUL.CRF]: <CR>47962 + 413345Bytes symbol space free0 Warning Errors0 Severe ErrorsC>LINK MYFILE.OBJ<CR>Microsoft (R) Overlay Linker Version 3.64Copyright (C) Microsoft Corp 1983-1988. All rights reserved.Run File [MYFILE.EXE]: <CR>List File [NUL.MAP]:<CR>Libraries [.LIB]: <CR>LINK : warning L4021: no stack segmentC>MYFILE<CR>利用debug调试宏汇编程序debug.exe是DOS系统自带的汇编调试软件,debug命令是DOS的内部命令,只要进入DOS系统在任何目录下都可以运行。
debug调试程序有多种命令,可以显示修改内存、汇编、反汇编、单步运行程序,中断运行程序等,是调试汇编程序的常用工具。
调试步骤:首先编写源程序,可以用任何文本文字(不带格式符)编辑系统编写源程序,如Windows 下的记事本,在这里我们一般使用DOS下的文本编辑器edit.exe,与debug.exe一样,edit也是DOS系统的内部命令,在任何目录下都可以运行。
TC论坛rainshine原创,转载麻烦各位带上原创作者名字……谢谢。
为防沉,一部分内容回复可见。
首先打开TC,主界面左上方有调试栏。
分别给大家解释下每个按钮的功能——运行:以调试模式运行脚本。
单步调试:脚本运行遇到断点后,单击此按钮可以一条语句一条语句地执行,每执行一条语句就会暂停。
过程调试:脚本运行遇到断点后,单击此按钮可以让脚本继续执行下去,直到遇到下个断点才停下。
停止调试:以调试模式运行脚本时,单击此按钮可以结束进程,退出脚本。
新建/删除断点:编写脚本时,在某个语句上加个断点。
删除所有断点:顾名思义,把此文件中添加的所有的断点都删除掉。
上面提到了一个名词:断点。
什么是断点呢,从脚本源码编辑框看,就是个小小的黄圈圈。
在代码左边、行数右边的地方单击鼠标就可以添加一个断点。
脚本在运行过程中(调试模式,生成为exe文件运行是不会有断点的,以下均为调试模式运行),实际上是在执行一行一行的源码,当执行到有断点的语句时(准确地说是执行此语句前,举个例子:这段代码给a=20添加了一个断点,程序运行到此行的时候就会停下来,此刻a的值是10不是20,也就是说,a=20还未执行。
),就会暂停下来。
此时我们可以看到TC界面下方的输出栏里:。
单击,可以看到此刻程序内所有变量的具体值:。
右击某个变量,在弹出的菜单中可以复制它的数值(例如第一个变量:" programming! by_rainshine.")。
也可以单击“复制整行”将此变量的所有信息写入剪贴板(例如:网络应用字符串字符型" programming! by_rainshine.")。
而单击“十六进制显示”,可以将“整型”的变量以16进制的方式显示出来:。
如果某个变量是数组,,单击一下右边的数值,就出现一个下拉框,单击右边的小箭头,就能看到数组所有元素的值啦。
当变量很多时,或者在分析整个代码的时候,看表格找变量值是很不方便的。
实验二程序的编译与调试第一部分配置本地计算机与虚拟机的通讯一、配置本地计算机的vmnet1网络接口1、由开始→控制面→网络连接2、双击VMware Network Adapter VMnet1接口→在“VMware Network Adapter VMnet1”状态对话框中选择属性按钮3、在“VMware Network Adapter VMnet1”属性对话框中双击“Internet协议(TCP/IP)”→出现“Internet协议(TCP/IP)属性”对话框例:若VMnet1的IP地址为:10.64.254.77子网掩码为:255.255.255.0那么:虚拟机中Linux设置的IP地址必须是:10.64.254.xx其中xx表示:1~254二、配置虚拟机1、打开虚拟机,但不要执行Power on this virtual machine→而是双Network Adapter2、在出现的“Virtual Machine Setting”对话框中确保选中“Host-only”选项→确定按钮3、选择“Power on this virtual machine”启动虚拟机三、配置Linux网络接口的IP地址1、使用root用户登录linux操作系统后,执行netconfig命令,将linux计算机IP地址设置为与本地计算机的VMnet1网络接口的IP地址处于同一网段,设置完成后输入reboot重启linux操作系统例:若VMnet1的IP地址为:10.64.254.77子网掩码为:255.255.255.0那么:虚拟机中Linux设置的IP地址必须是:10.64.254.xx其中xx表示:1~2542、在本地计算由http://202.204.125.59/~gaobao/下载ssh_pshell,打开ssh_pshell连接虚拟机,以root 用户登录第二部分gcc编译器的使用作业:编译如下程序,并填写程序的输出结果:1、源代码---Pointer.c#include <stdio.h>int main(){int a = 100, b = 200;int *p1 = &a, *p2 = &b;printf(“%d, %d\n”,a,b);printf(“%d,%d\n”,*p1, *p2);printf(“%x,%x\n”,&a,&a);printf(“%x,%x\n\n”,p1,p2);*p1 = *p1*3;Printf(“%d\n”,a);Printf(“%d\n\n”,*p1);p1 = &b;printf(“%x\n”,p1);printf(“%x\n”,p2);return 0;}2、编译:#gcc –o pointer pointer.c3、执行#./point(二)、运行结果需要的技能0、vi编辑器的使用Vi是广泛应用于各种unix和Linux系统中的文本编辑器,它是标准的Linux文本编辑程序。
TC论坛rainshine原创,转载麻烦各位带上原创作者名字……谢谢。
为防沉,一部分内容回复可见。
首先打开TC,主界面左上方有调试栏。
分别给大家解释下每个按钮的功能——运行:以调试模式运行脚本。
单步调试:脚本运行遇到断点后,单击此按钮可以一条语句一条语句地执行,每执行一条语句就会暂停。
过程调试:脚本运行遇到断点后,单击此按钮可以让脚本继续执行下去,直到遇到下个断点才停下。
停止调试:以调试模式运行脚本时,单击此按钮可以结束进程,退出脚本。
新建/删除断点:编写脚本时,在某个语句上加个断点。
删除所有断点:顾名思义,把此文件中添加的所有的断点都删除掉。
上面提到了一个名词:断点。
什么是断点呢,从脚本源码编辑框看,就是个小小的黄圈圈。
在代码左边、行数右边的地方单击鼠标就可以添加一个断点。
脚本在运行过程中(调试模式,生成为exe文件运行是不会有断点的,以下均为调试模式运行),实际上是在执行一行一行的源码,当执行到有断点的语句时(准确地说是执行此语句前,举个例子:这段代码给a=20添加了一个断点,程序运行到此行的时候就会停下来,此刻a的值是10不是20,也就是说,a=20还未执行。
),就会暂停下来。
此时我们可以看到TC界面下方的输出栏里:。
单击,可以看到此刻程序内所有变量的具体值:。
右击某个变量,在弹出的菜单中可以复制它的数值(例如第一个变量:" programming! by_rainshine.")。
也可以单击“复制整行”将此变量的所有信息写入剪贴板(例如:网络应用字符串字符型" programming! by_rainshine.")。
而单击“十六进制显示”,可以将“整型”的变量以16进制的方式显示出来:。
如果某个变量是数组,,单击一下右边的数值,就出现一个下拉框,单击右边的小箭头,就能看到数组所有元素的值啦。
当变量很多时,或者在分析整个代码的时候,看表格找变量值是很不方便的。
汇编语言的编译、调试实验日期:20124202.1. 1实验目的1、熟练掌握编写汇编语言源程序的基本方法和基本框架。
2、学会编写顺序结构和简单分支的汇编语言程序3、掌握汇编语言的上机过程。
2. 1 . 2实验内容假设有一组数据:5,-4 , 0, 3, 100, -51,请编一程序,判断:每个数是否大于0? 等于0?还是小于0,将判断结果存放在数组后的连续单元中。
即:1 「当X > 0Y= J 0 当X = 0 -1 当X < 02. 1 . 3实验要求1、实验前准备①分析题目,将程序中的原始数据和最终结果的存取方式确定好。
②写出算法或画出流程图。
③写出源程序。
④对程序结果进行分析,并准备好上机调试过程。
2、编写完整的汇编语言程序,要求在编辑软件下(如: EDIT)写程序,通过汇编(MASM、连接(LINK)生成执行文件,跟踪调试(DEBUG。
2. 1 . 4编程提示①首先将原始数据(5, -4 , 0, 3, 100, -51、装入起始地址为XX的字节存储单元中。
②将判断结果以字符串的形式存放在数据区中,以便在显示输出时调用。
③其中判断部分可采用CMP旨令,得到一个分支结构,分别存放判断结果“0” “1 ”“-1 ”④程序中存在一个循环结构,循环6次。
⑤参考程序流程图,如图2-12. 1 . 5实验报告1、调试说明上机调试的情况:上机调试步骤,调试过程中所遇到的问题是如何解决的。
对调试过程中的问题进行分析,对执行结果进行分析。
2、画出程序框图3、写出程序清单和执行过程。
4、谈实验体会及对汇编语言上机过程的理解。
源代码编译【实验名称】:源代码编译【实验环境】:RedhatA:192.168.18.1 255.255.255.0Windows Xp:192.168.18.100 255.255.255.0 网关:192.168.18.1 【实验目标】:1. 重新编译安装2.iptables编译安装【实验步骤】:重新编译安装RedhatA:1.修改内存为512MB2..取消多余模块(nfslock)-----ntsysv3.挂载光盘:Layer7.isoMount /dev/cdrom /media/4.跳转到src下解压文件释放内核源码包,Cd /usr/srctar zxvf /media/linux-2.6.28.10.tar.gztar zxvf /media/netfilter-Laryer7-v2.22.tar.gz5. 合并并打补丁Cd linux-2.6.28.10/patch -p1 < ../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch6.配置内核编译参数cp /boot/config-2.6.18-164.el5 .config7.在源码目录中执行―make menuconfig‖命令⑴选择networking support -→⑵选择networking options-→⑶选择networking packet filtering framwork -→⑷选择Core netfilter configuration-→①<M>netfilter connection traceking support②<M>laryer7③<M>―time‖ match support④<M>"string" match support⑤<M>"connlimit" match support"⑥<M>―iprange‖ address range match support⑦<M>―state‖ match support⑧<M>"mac" address match support⑨选择exit后退⑸选择IP netfilter configuration①选择<M>IPv4 connection tracking support (require for NAT)”②<M>Full NAT③选择exit退出并保存(YES)8.编译内核的模块文件、执行程序--------make9.安装编译好的模块文件-----执行make modules__install 命令查看配置:ll /lib/ modulesll /lib/ modules/2.6.28.10/ll /boot10.安装编译好的内核执行程序-----执行make install 命令11.查看配置----cat /etc/grup.conf12.重启(reboot)长按“↓”选择linux-2.6.28.1013.以root登录,用命令:uname –r 查看版本重新编译安装iptables工具RedhatA:1.挂载光盘Layer7.iso拷贝iptables文件和layer7文件到根下cp /media/iptables-1.4.7.tar.bz2 。
(1),error: error reading file 'C:\CCStudio_v3.3\MyProjects\ad\cc_build_Debug.log': file too short>> Compilation failure(2),undefined first referencedsymbol in file--------- ----------------FS$$MPYC:\CCStudio_v3.3\MyProjects\cputimer\Debug\DSP28_CpuTimers.objFS$$TOLC:\CCStudio_v3.3\MyProjects\cputimer\Debug\DSP28_CpuTimers.obj>> error: symbol referencing errors - './Debug/cputimer.out' not built解决:将rts2800.lib项目连接的库改成rts2800_ml.lib(3),Can't Run Target CPU: Can't write to data memory 0x950, check memory config [-2184] Can't Run Target CPU: Can't write to data memory 0x951, check memory config [-2184]Can't Run Target CPU: Can't write to data memory 0x952, check memory config [-2184]Can't Run Target CPU: Can't write to data memory 0x953, check memory config [-2184]Can't Run Target CPU: Can't write to data memory 0x954, check memory config [-2184]解决:// On TMX samples, to get the best performance of on chip RAM blocks M0/M1/L0/L1/H0 internal// control registers bit have to be enabled. The bits are in Device emulation registers./* DevEmuRegs.M0RAMDFT = 0x0300;DevEmuRegs.M1RAMDFT = 0x0300;DevEmuRegs.L0RAMDFT = 0x0300;DevEmuRegs.L1RAMDFT = 0x0300;DevEmuRegs.H0RAMDFT = 0x0300;*/直接删掉就行,那段代码是测试版为了提高性能的代码,到正式版的时候地址被保留,再加上的话就出错了(4),编译错误declaration may not appear after executable statement in block系统初始化前没有进行变量的定义如下例:InitSysCtrl();unsigned int temp=0x0001; unsigned int i,j;(5),编译警告:last line of file ends without a newline解决:将光标移到提示告警的代码最后一行(有代码的那一行),然后按住del键,直到确定下面没有回车行,最后回车一下或多下即可。
实验2汇编源程序编写与汇编、调试四、实验结论1. 实验任务1使⽤任意⼀款⽂本编辑器,编写8086汇编源程序ex1.asm。
源代码如下:assume cs:codecode segmentmov ax,0b810hmov ds,axmov byte ptr ds:[0],1mov byte ptr ds:[1],1mov byte ptr ds:[2],2mov byte ptr ds:[3],2mov byte ptr ds:[4],3mov byte ptr ds:[5],3mov byte ptr ds:[6],4mov byte ptr ds:[7],4mov ah,4chint 21hcode endsend 要求:使⽤8086汇编程序编写、汇编、链接、运⾏、调试⽅法,对ex1.asm进⾏汇编、链接、运⾏,使⽤debug⼯具调试可执⾏⽂件。
1)ex1.asm源代码(使⽤⽂本编辑器):2)使⽤masm、link⼯具汇编、链接的命令⾏及运⾏结果截图:3)给出使⽤debug调试的截图①进⼊debug调试环境,通过r命令查看当前寄存器的状态由上图的DS=075A,可知PSP的地址为075A:0。
使⽤d命令查看程序段前缀PSP所占的256个字节,截图如下:②结合可执⾏⽂件加载后,可知寄存器CX的值为0031H,使⽤u命令精确反汇编截图③使⽤g命令执⾏到line16退出执⾏之前,操作截图如下:2. 实验任务2使⽤任意⼀款⽂本编辑器,编写8086汇编源程序ex2.asm。
源代码如下:; ex2.asmassume cs:codecode segmentmov ax, 0b810hmov ds, axmov bx, 0mov ax, 101Hmov cx, 4s: mov [bx], axadd bx, 2add ax, 101Hloop smov ah, 4chint 21hcode endsend 要求:使⽤8086汇编程序编写、汇编、链接、运⾏、调试⽅法,对ex2.asm进⾏汇编、链接、运⾏,使⽤debug⼯具调试可执⾏⽂件。