华科_计算机系统实验报告

合集下载

华科-计算机网络实验报告-javasocket编程-网络组建实验

华科-计算机网络实验报告-javasocket编程-网络组建实验

课程实验报告课程名称:专业班级:计算机科学与技术1003班学号:姓名:鲁辰指导教师:报告日期:计算机科学与技术学院目录1实验二 Socket 编程(E-Mail)................... 错误!未定义书签。

实验目的....................................... 错误!未定义书签。

实验要求....................................... 错误!未定义书签。

实验内容....................................... 错误!未定义书签。

实验过程....................................... 错误!未定义书签。

需求分析................................... 错误!未定义书签。

界面....................................... 错误!未定义书签。

写信....................................... 错误!未定义书签。

收信....................................... 错误!未定义书签。

实验体会....................................... 错误!未定义书签。

2 实验2 网络组建与实施............................. 错误!未定义书签。

实验目的....................................... 错误!未定义书签。

实验环境、要求................................. 错误!未定义书签。

实验实验环境............................... 错误!未定义书签。

实验要求.................................... 错误!未定义书签。

华科操作系统实验

华科操作系统实验

华科操作系统实验 Corporation standardization office #QS8QHH-HHGX8Q8-GNHHJ8课程实验报告课程名称:操作系统课程设计专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院目录实验1:进程并发实验1.1 实验概述通过本次进程并发实验,让同学更加熟悉和理解Linux编程环境。

1.2 实验内容本次实验的内容主要分为两个任务:1.编写一个C程序,用read、write等系统调用实现文件拷贝功能。

命令形式:copy <源文件名> <目标文件名>2. 编写一个C程序,使用图形编程库 (QT/GTK)分窗口显示三个并发进程的运行(一个窗口实时显示当前系统时间,一个窗口循环显示0到9,一个窗口做1到1000的累加求和,刷新周期均为1秒)。

1.3 实验设计任务1:实验1的第一个阶段需要实现一个简单的C语言程序,首先需要有一个复制的源文件,同时需要创建一个存放复制内容的复制文件,文件复制传输的中间站可以设置一个缓冲数组,此次试验设计了一个大小为10个字节的数组。

打开复制源文件,返回一个INT标识,使用readbuf()函数,每次读取10个字节的内容,将内容存放到缓冲区数组,使用writebuf()函数将缓冲区的10个字节写到复制文件中,重复上述过程直到将整个复制过程完成。

任务2:实验的第二个阶段是实现进程的同步,实现的工具是QT。

主要实现3个进程的同步,3个进程分别为:实时显示系统时间、循环显示0-9、显示1-1000的累加和。

以上程序的刷新时间设置为1秒钟。

使用的是c++编程语言。

为了实现3个进程。

需要为这3个进程分别创建3个不同的类,这3个不用的类具有不同的成员函数,使用成员函数来实现进程的所代表的具体细节。

为了实现进程的结果能实时更新,需要调用connect()函数,该函数的功能是每当其中的timer每次发生变化时,就回调用该类的成员函数,也就是进程的具体实现,从而实时显示进程的细节内容。

操作系统实验报告--华科

操作系统实验报告--华科

实验一哲学家就餐问题一、实验目的1、熟练使用VC++6.0编译环境,调试并正确运行程序。

2、理解哲学家就餐问题中出现的问题,进而掌握死锁的必要条件。

3、理解源程序中产生和防止死锁的算法,及相关窗口操作。

4、熟悉哲学家就餐问题流程。

5、在VC++6.0环境下编译哲学家就餐问题演示程序,考虑其他解决死锁方法.二、实验原理1、问题描述有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。

每个哲学家的行为是思考,感到饥饿,然后吃通心粉。

为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。

2、分配方式方式一(不会进入死锁)仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子。

这样要么一次占有两只筷子(所有线程需要的资源)进行下一步的吃通心粉,然后释放所有的资源;要么不占用资源,这样就不可能产生死锁了。

方式二(会进入死锁)当筷子(资源)可用时,先分配左边的筷子,等待一会后再分配右边的筷子,由于这个过程中,左边的筷子一直没有释放,就有可能产生死锁了。

3、程序运行说明程序运行过程中会弹出一个MessageBox提示操作者操作:1)第一个对话框用于选择运行模式a.选择yes 表示采用的是运行的防止死锁的方式,这样的话整个程序可以一直运行下去,不会产生死锁。

b.选择no 表示运行产生死锁的方式会弹出第二个对话框。

2)第二个对话框用于选择运行时,线程运行的时间a. 选择res 线程时间比较短,很快就可以死锁b.选择no 线程时间跟选择yes 时候的时间差不多,产生死锁的时间稍微长一点。

三、实验过程及分析1、伪代码:1) 不发生死锁的方式(要么一下占用两支筷子,要么不占用)var mutexleftchopstick,mutexrightchopstick;beging:resting;waiting;p(mutexleftchopstick); //先改变左手筷子信号量p(mutexrightchopstick); //马上改变右手筷子信号量GetResource(leftchopstick,rightchopstick);eating;v(mutexleftchopstick);v(mutexrightchopstick);end2) 发生死锁的方式(一旦可以占用筷子,就马上占用)var mutexleftchopstick,mutexrightchopstick;beging:resting;waiting;p(mutexleftchopstick); //改变左手筷子信号量GetResource(leftchopstick); //获取左手筷子p(mutexrightchopstick); //改变右手筷子信号量GetResource(rightchopstick); //获取右手筷子eating;v(mutexleftchopstick);v(mutexrightchopstick);end2、代码分析:1)不发生死锁的方式:先确定两只筷子均没被占用才获取筷子,这样就打破了死锁的必要条件。

华中科技大学计算机原理实验报告

华中科技大学计算机原理实验报告

电气学科大类《计算机原理与应用实验》课程实验报告电气与电子工程学院级姓名:学号:专业班号:日期:2014年1月7日实验成绩:评阅人:实验评分表目录实验评分表错误!未指定书签。

实验一:软件安装与使用错误!未指定书签。

一、实验目的错误!未指定书签。

二、实验设备错误!未指定书签。

三、实验任务错误!未指定书签。

四、实验原理错误!未指定书签。

五、实验内容错误!未指定书签。

六、实验过程及结果错误!未指定书签。

七、实验感想八、参考文献实验二:汇编语言实例讲解与程序编写一、实验目的二、实验设备三、实验任务四、实验原理五、实验内容六、实验过程及结果七、实验感想八、参考文献实验三:基于软件的最小系统硬件设计一、实验目的二、实验设备三、实验任务四、实验原理五、实验内容六、实验过程及结果七、实验感想八、参考文献实验四:基于最小系统的汇编程序设计一、实验目的错误!未指定书签。

二、实验设备错误!未指定书签。

三、实验任务错误!未指定书签。

四、实验原理错误!未指定书签。

五、实验内容六、实验过程及结果七、实验感想八、参考文献实验五:并行接口实验(演示实验)一、实验目的二、实验设备三、实验任务四、实验原理五、实验内容六、实验过程及结果七、实验感想八、参考文献实验六:工频测频接口电路设计与实现一、实验目的二、实验设备三、实验任务四、实验原理五、实验内容六、实验过程及结果七、实验感想八、参考文献实验一:软件安装与使用一、实验目的通过本实验学习软件的安装与使用。

二、实验设备微机一台,仿真软件三、实验任务.安装仿真软件。

.利用仿真软件编程。

四、实验原理仿真软件就是在下的一种仿真软件,它可以仿真模拟的程序运行,并且可以直观地观察寄存器的变化情况。

结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟),还有一个循序渐进的指导工具。

这对刚开始学组合语言的人会是一个很有用的工具。

它会在模拟器中一步一步的编译程序码并执行,视觉化的工作环境让它更容易使用。

计算机系统实验报告

计算机系统实验报告

计算机系统实验报告计算机系统实验报告一、引言计算机系统是现代社会不可或缺的一部分,它的发展与应用深刻地影响着我们的生活。

为了更好地理解和掌握计算机系统的工作原理,我们进行了一系列的实验。

本报告将对这些实验进行总结和分析,以便更好地理解计算机系统的运行机制。

二、实验目的本次实验的主要目的是通过实际操作和观察,加深对计算机系统各个组成部分的理解。

具体实验内容包括CPU的运行原理、内存管理、进程调度等。

三、实验过程与结果1. CPU的运行原理在本次实验中,我们通过模拟CPU的运行过程,深入了解了指令的执行过程。

我们使用了一系列指令,包括算术运算、逻辑运算、条件判断等。

通过观察指令的执行结果,我们可以清楚地看到CPU对指令的解码、执行和结果输出过程。

2. 内存管理内存管理是计算机系统中非常重要的一部分,它负责管理计算机的内存资源。

在本次实验中,我们学习了内存的分配与回收算法。

通过实际操作,我们了解了最先适应算法、最佳适应算法等不同的内存分配策略,并对它们的优缺点进行了比较和分析。

3. 进程调度进程调度是操作系统中的一个重要功能,它负责决定哪个进程先执行,哪个进程后执行。

在本次实验中,我们模拟了多个进程的运行,并通过实验操作观察了不同的调度算法对系统性能的影响。

我们了解了先来先服务算法、短作业优先算法、时间片轮转算法等不同的调度算法,并对它们的优劣进行了探讨。

四、实验结果分析通过以上实验,我们对计算机系统的各个组成部分有了更深入的了解。

我们发现,CPU的运行原理决定了计算机的运算速度和效率,内存管理直接影响了计算机的稳定性和资源利用率,而进程调度则决定了系统的响应速度和用户体验。

因此,合理的CPU设计、高效的内存管理和优秀的进程调度算法是保证计算机系统高效运行的关键。

五、实验总结通过本次实验,我们不仅加深了对计算机系统的理论知识的理解,还通过实际操作和观察,更加直观地感受到了计算机系统的工作原理。

我们了解了CPU的运行过程、内存管理的重要性以及进程调度的作用。

华科操作系统实验

华科操作系统实验

课程实验报告课程名称:操作系统课程设计专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院目录实验1:进程并发实验 (1)实验概述 (1)实验内容 (1)实验设计 (1)实验过程 (2)实验结果 (6)实验小结 (7)实验2:添加系统功能调用 (8)实验概述 (8)实验内容 (8)阶段1 添加源代码 (8)阶段2 连接新的系统功能调用 (9)阶段3 重建内核 (10)阶段4 修改grub文件 (13)实验小结 (14)实验3:添加设备驱动程序 (15)实验概述 (15)实验内容 (15)阶段1 编写设备驱动程序 (15)阶段2 编译设备驱动模块 (16)阶段3 加载设备驱动模块 (17)阶段4 生成设备文件 (18)阶段5 编写应用程序测试 (18)实验小结 (19)实验总结 (20)实验1:进程并发实验实验概述通过本次进程并发实验,让同学更加熟悉和理解Linux编程环境。

实验内容本次实验的内容主要分为两个任务:1.编写一个C程序,用read、write等系统调用实现文件拷贝功能。

命令形式:copy <源文件名> <目标文件名>2.编写一个C程序,使用图形编程库 (QT/GTK)分窗口显示三个并发进程的运行(一个窗口实时显示当前系统时间,一个窗口循环显示0到9,一个窗口做1到1000的累加求和,刷新周期均为1秒)。

实验设计任务1:实验1的第一个阶段需要实现一个简单的C语言程序,首先需要有一个复制的源文件,同时需要创建一个存放复制内容的复制文件,文件复制传输的中间站可以设置一个缓冲数组,此次试验设计了一个大小为10个字节的数组。

打开复制源文件,返回一个INT标识,使用readbuf()函数,每次读取10个字节的内容,将内容存放到缓冲区数组,使用writebuf()函数将缓冲区的10个字节写到复制文件中,重复上述过程直到将整个复制过程完成。

任务2:实验的第二个阶段是实现进程的同步,实现的工具是QT。

华科并行实验报告

华科并行实验报告

一、实验模块计算机科学与技术二、实验标题并行计算实验三、实验目的1. 了解并行计算的基本概念和原理;2. 掌握并行编程的基本方法;3. 通过实验加深对并行计算的理解。

四、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 并行计算平台:OpenMP五、实验步骤1. 准备实验环境首先,在计算机上安装OpenMP库,并配置环境变量。

2. 编写并行计算程序编写一个简单的并行计算程序,实现以下功能:(1)计算斐波那契数列的第n项;(2)计算素数的个数;(3)计算矩阵乘法。

以下为斐波那契数列的并行计算程序示例:```cpp#include <omp.h>#include <iostream>using namespace std;int main() {int n = 30;int fib[31] = {0};fib[0] = 0;fib[1] = 1;#pragma omp parallel forfor (int i = 2; i <= n; i++) {fib[i] = fib[i - 1] + fib[i - 2];}cout << "斐波那契数列的第" << n << "项为:" << fib[n] << endl; return 0;}```3. 编译程序使用g++编译器编译程序,并添加OpenMP库支持。

```bashg++ -fopenmp -o fib fib.cpp```4. 运行程序在命令行中运行编译后的程序,观察结果。

5. 分析结果通过对比串行计算和并行计算的结果,分析并行计算的优势。

六、实验过程1. 准备实验环境,安装OpenMP库并配置环境变量;2. 编写并行计算程序,实现斐波那契数列的并行计算;3. 编译程序,并添加OpenMP库支持;4. 运行程序,观察结果;5. 分析结果,对比串行计算和并行计算的性能。

华中科技大学计算机系统基础实验报告

华中科技大学计算机系统基础实验报告

课程实验报告课程名称:计算机系统基础专业班级:学号:姓名:指导教师:报告日期:2016年5月24 日计算机科学与技术学院目录实验1: (2)实验2: (9)实验3: (22)实验总结 (30)实验1:数据表示1.1 实验概述本实验的目的是更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。

实验中,你需要解开一系列编程“难题”——使用有限类型和数量的运算操作实现一组给定功能的函数,在此过程中你将加深对数据二进制编码表示的了解。

实验语言:c; 实验环境: linux1.2 实验内容需要完成bits.c 中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。

1.3 实验设计源码如下:/** lsbZero - set 0 to the least significant bit of x* Example: lsbZero(0x87654321) = 0x87654320* Legal ops: ! ~ & ^ | + << >>* Max ops: 5* Rating: 1*/int lsbZero(int x) {//x右移一位再左移一位实现把最低有效位置0x = x>>1;x = x<<1;return x;}/** byteNot - bit-inversion to byte n from word x* Bytes numbered from 0 (LSB) to 3 (MSB)* Examples: getByteNot(0x12345678,1) = 0x1234A978* Legal ops: ! ~ & ^ | + << >>* Max ops: 6* Rating: 2*/int byteNot(int x, int n) {//x第n个字节每位都和1异或实现取反int y = 0xff;n = n<<3;y = y<<n;x = (x^y);return x;}/** byteXor - compare the nth byte of x and y, if it is same, return 0, if not, return 1* example: byteXor(0x12345678, 0x87654321, 1) = 1* byteXor(0x12345678, 0x87344321, 2) = 0* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 2*/int byteXor(int x, int y, int n) {//把x和y的第n个字节取出来异或,再转换为逻辑的0和1n = n<<3;x = x>>n;y = y>>n;x = x&(0xff);y = y&(0xff);return !!(x^y);}/** logicalAnd - x && y* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 3*/int logicalAnd(int x, int y) {//把x和y分别转化为逻辑的0和1,再相与x = (!(!x))&(!(!y));return x;}/** logicalOr - x || y* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 3*/int logicalOr(int x, int y) {//把x和y分别转化为逻辑的0和1,再相或x = (!(!x))|(!(!y));return x;}/** rotateLeft - Rotate x to the left by n* Can assume that 0 <= n <= 31* Examples: rotateLeft(0x87654321,4) = 0x76543218* Legal ops: ~ & ^ | + << >> !* Max ops: 25* Rating: 3*/int rotateLeft(int x, int n) {//先构造低n位为1,高(32-n)位为0的数z,x左移n位后的数加上x右移(32-n)位的数&z即可int z;z = ~(((1<<31)>>31)<<n);x = ((x>>(32+(~n+1)))&z)+(x<<n);return x;}/** parityCheck - returns 1 if x contains an odd number of 1's* Examples: parityCheck(5) = 0, parityCheck(7) = 1* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 4*/int parityCheck(int x) {//每次将数的低半数位与高半数位比较,再把y右移31位,最后把y转化为逻辑的0和1int y;y = x<<16;y = y^x;y = y^(y<<8);y = y^(y<<4);y = y^(y<<2);y = y^(y<<1);y = y>>31;return !(!y);}/** mul2OK - Determine if can compute 2*x without overflow* Examples: mul2OK(0x30000000) = 1* mul2OK(0x40000000) = 0** Legal ops: ~ & ^ | + << >>* Max ops: 20* Rating: 2*/int mul2OK(int x) {//把x第31位和30位分别和1做按位与,再异或,再和1异或int m;m = ((x>>31)&0x1)^((x>>30)&0x1);return m^0x1;}/** mult3div2 - multiplies by 3/2 rounding toward 0,* Should exactly duplicate effect of C expression (x*3/2),* including overflow behavior.* Examples: mult3div2(11) = 16* mult3div2(-9) = -13* mult3div2(1073741824) = -536870912(overflow)* Legal ops: ! ~ & ^ | + << >>* Max ops: 12* Rating: 2*/int mult3div2(int x) {//左移一位再+x即x*3,右移一位的时候,当y的最高位和最低位都为0时还要+1int y = (x<<1)+x;y = (y>>1)+(((y>>31)&1)&(((y<<31)>>31)&1));return y;}/** subOK - Determine if can compute x-y without overflow* Example: subOK(0x80000000,0x80000000) = 1,* subOK(0x80000000,0x70000000) = 0,* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 3*/int subOK(int x, int y) {//x的最高有效位和y的最高有效位不同且x和(x-y)的最高位不同才能判断溢出int m = (x>>31)&1;int n = (y>>31)&1;x = (m^n)&(m^(((x+(~y+1))>>31)&1));return (!x);}/** absVal - absolute value of x* Example: absVal(-1) = 1.* You may assume -TMax <= x <= TMax* Legal ops: ! ~ & ^ | + << >>* Max ops: 10* Rating: 4*/int absVal(int x) {//x最高位为0时就是x,最高位为1时是~x+1int y = x>>31;x = (y&(~x+1))+((~y)&x);return x;}/** float_abs - Return bit-level equivalent of absolute value of f for * floating point argument f.* Both the argument and result are passed as unsigned int's, but * they are to be interpreted as the bit-level representations of * single-precision floating point values.* When argument is NaN, return argument..* Legal ops: Any integer/unsigned operations incl. ||, &&. also if, while* Max ops: 10* Rating: 2*/unsigned float_abs(unsigned uf) {int x=uf&(~(1<<31));if(x>0x7f800000){return uf;}else return x;}/** float_f2i - Return bit-level equivalent of expression (int) f* for floating point argument f.* Argument is passed as unsigned int, but* it is to be interpreted as the bit-level representation of a* single-precision floating point value.* Anything out of range (including NaN and infinity) should return * 0x80000000u.* Legal ops: Any integer/unsigned operations incl. ||, &&. also if, while* Max ops: 30* Rating: 4*/int float_f2i(unsigned uf) {unsigned num=0x80000000;int x=(uf&0x007fffff)^0x00800000;int order=0;order=(uf&0x7f800000)>>23;if(order>158){return num;}if(order<127) return 0;else if(((uf>>31)&1)==1){if(order>150){return ~(x<<(order-150))+1;}else return ~(x>>(150-order))+1;}else{if(order>150) return x<<(order-150);else return x>>(150-order);}}1.4 实验过程编写源码,运行btest,得出实验结果。

华科_计算机系统实验报告

华科_计算机系统实验报告

课程实验报告课程名称:计算机系统基础专业班级:学号:姓名:指导教师:报告日期:年月日计算机科学与技术学院目录实验1: (1)实验2: (7)实验3: (24)实验总结 (34)实验1:数据表示1.1 实验概述实验目的:更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。

实验目标:加深对数据二进制编码表示的了解。

实验要求:使用有限类型和数量的运算操作实现一组给定功能的函数。

实验语言:c。

实验环境:linux1.2 实验内容需要完成bits.c中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。

1)位操作表1列出了bits.c中一组操作和测试位组的函数。

其中,“级别”栏指出各函数的难度等级(对应于该函数的实验分值),“功能”栏给出函数应实现的输出(即功能),“约束条件”栏指出你的函数实现必须满足的编码规则(具体请查看bits.c中相应函数注释),“最多操作符数量”指出你的函数实现中允许使用的操作符的最大数量。

你也可参考tests.c中对应的测试函数来了解所需实现的功能,但是注意这些测试函数并不满足目标函数必须遵循的编码约束条件,只能用做关于目标函数正确行为的参考。

表1 位操作题目列表2)补码运算表2列出了bits.c中一组使用整数的补码表示的函数。

可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。

表2 补码运算题目列表3)浮点数操作表3列出了bits.c中一组浮点数二进制表示的操作函数。

可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。

注意float_abs的输入参数和返回结果(以及float_f2i函数的输入参数)均为unsigned int类型,但应作为单精度浮点数解释其32 bit二进制表示对应的值。

表3 浮点数操作题目列表表示,当输入参数是NaN 时,返回NaN 号整型操作,包括||,&&以及if,while控制结构4 float_f2i 返回浮点数‘f’的强制整型转换“(int)f”表示仅能使用任何整型/无符号整型操作,包括||,&&以及if,while控制结构301.3 实验设计根据题目要求,选择合适的操作符来编写代码。

华中科技大学-计算机学院-数据结构实验报告

华中科技大学-计算机学院-数据结构实验报告

华中科技大学-计算机学院-数据结构实验报告LT目录1基于顺序存储结构实现线性表的基本运算 (1)1.1 实验目的 (1)1.2 线性表演示系统设计 (1)1.2.1 系统总体设计 (1)1.2.2 有关常量和类型定义 (1)1.2.3 算法设计 (1)1.3 线性表演示系统实现与测试 (3)1.3.1 系统实现 (3)1.3.2 系统测试 (11)1.4 实验小结 (12)2 基于链式实现线性表的基本运算 (13)2.1 问题描述 (13)2.2 线性表演示系统设计 (13)2.2.1 系统总体设计 (13)2.2.2 有关常量和类型定义 (13)2.2.3 算法设计 (13)2.3 线性表演示系统实现与测试 (15)2.3.1 系统实现 (15)2.3.2 系统测试 (24)2.4 实验小结 (25)3基于顺序存储结构实现栈的基本运算 (27)3.1实验目的 (27)3.2栈演示系统设计 (27)3.2.1 系统总体设计 (27)3.2.2 算法实现 (27)3.3 栈演示系统实现与测试 (28)3.3.1 程序实现 (28)3.3.2 系统测试 (34)3.4 实验小结 (35)4基于循环队列存储结构实现队列的基本运算 (36)4.1 问题描述 (36)4.2.1 系统总体设计 (36)4.2.2 有关常量和类型定义 (36)4.2.3 算法设计 (36)4.3 队列演示系统实现与测试 (37)4.3.1 系统实现 (37)4.3.2 系统测试 (44)4.4 实验小结 (45)5基于二叉链表实现二叉树的基本运算 (46)5.1 实验目的 (46)5.2.1 系统总体设计 (46)5.2.2 有关常量和类型定义 (46)5.2.3 算法设计 (46)5.3 二叉树演示系统实现与测试 (48)5.3.1 系统实现 (48)5.3.2 系统测试 (79)5.4 实验小结 (81)6基于邻接表实现图的基本和常见运算 (82)6.1 实验目的 (82)6.2.1 系统总体设计 (82)6.2.2 有关常量和类型定义 (82)6.2.3 算法设计 (82)6.3 图演示系统实现与测试 (83)6.3.1 系统实现 (83)6.3.2 系统测试 (101)6.4 实验小结 (103)参考文献 (104)1基于顺序存储结构实现线性表的基本运算1.1 实验目的通过实验达到:(1)加深对线性表的概念、基本运算的理解;(2)熟练掌握线性表的逻辑结构与物理结构的关系;(3)物理结构采用顺序表,熟练掌握线性表的基本运算的实现。

华科 计算机网络 实验报告3

华科 计算机网络 实验报告3

电子与信息工程系实验报告实验名称分组观察与交换机课程名称计算机网络姓名张建佳学号U201013086 日期2012-03-21 地点南一楼东203 成绩教师徐晶1.实验目的1.掌握数据链路层(L2)的基本原理2.掌握观察和配置主机、交换机3.观察主机在局域网中发送的帧格式4.观察交换机的生成树算法的现象2.实验环境(说明运行的操作系统、编程工具和集成开放环境、桌号、机器IP地址等)操作系统:Windows XP组别:第5组IP地址:192.168.1.151 192.168.8.513.实验内容与结果软件编程类实验报告内容:(1)程序整体功能;(2)程序组成及各模块/函数功能;(3)重要的数据结构,模块/函数算法;(4)程序清单(手写或者打印后作为附件)(5)程序的运行和测试结果(提供截图)(一) 熟悉环境本机IP配置,MAC 地址观察,网内ARP 观察1. 配置本机的两个IP地址用网线将网卡和交换机端口相连,配置IP地址。

2.MA C地址观察打开Windows命令提示符,输入ipconfig/all,获取MA C地址3.网内ARP 观察这样,我们得到了网内所有主机的MA C地址Interface: 192.168.1.151 --- 0x2Internet Address Physical Address Type192.168.1.1 00-18-71-68-64-b7 dynamic192.168.1.20 00-1a-a9-3a-ac-97 dynamic192.168.1.30 00-1a-a9-3a-ac-6b dynamic192.168.1.40 00-1a-a9-3a-ac-29 dynamic192.168.1.50 00-1a-a9-3a-ac-6f dynamic192.168.1.111 14-fe-b5-e4-6d-00 dynamic192.168.1.112 14-fe-b5-e4-65-9e dynamic192.168.1.113 bc-30-5b-c9-1f-5f dynamic192.168.1.114 14-fe-b5-e4-1f-a7 dynamic192.168.1.115 14-fe-b5-e4-6f-7c dynamic。

华科计算机并行实验报告

华科计算机并行实验报告

课程设计报告题目:并行实验报告课程名称:并行编程原理与实践专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院目录1,实验一 (1)1 实验目的与要求 (1)1.1实验目的 (1)1.2实验要求 (1)2 实验内容 (1)2.1.1熟悉pthread编程 (1)2.1.2简单的thread编程 (2)2.2.1熟悉openMP编程 (3)2.3.1熟悉MPI编程 (4)2,实验2~5 (7)1 实验目的与要求 (7)2 算法描述 (7)3.实验方案 (8)4实验结果与分析 (8)3 心得体会 (10)附录: (10)3 蒙特.卡罗算法求π的并行优化 (19)1.蒙特.卡罗算法基本思想 (19)2.工作过程 (20)3.算法描述 (20)4 设计与实现 (21)5 结果比较与分析 (23)6 思考与总结 (24)1,实验一1 实验目的与要求1.1实验目的1)熟悉并行开发环境,能进行简单程序的并行开发,在Linux下熟练操作。

2)熟悉一些并行工具,如pthread,OpenMP,MPI等进行并行编程3)培养并行编程的意识1.2实验要求1)利用pthread、OpenMP、MPI等工具,在Linux下进行简单的并行编程,并且掌握其编译、运行的方法。

2)理解并行计算的基础,理解pthread、OpenMP、MPI等并行方法。

2 实验内容2.1.1熟悉pthread编程Linux系统下的多线程遵循POSIX线程接口,称为 pthread。

编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。

下面是pthread编程的几个常用函数:1,int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr, void *(*start_rtn)(void),void *restrict arg);返回值:若是成功建立线程返回0,否则返回错误的编号形式参数:pthread_t *restrict tidp 要创建的线程的线程id指针const pthread_attr_t *restrict attr 创建线程时的线程属性void* (start_rtn)(void) 返回值是void类型的指针函数void *restrict arg start_rtn的行参2 , int pthread_join( pthread_t thread, void **retval );thread表示线程ID,与线程中的pid概念类似;retval用于存储等待线程的返回值连接函数pthread_join()是一种在线程间完成同步的方法。

华科计算机生产实习报告

华科计算机生产实习报告

华科计算机生产实习报告1、概述由于自己本科期间大三、大四的课程很多没有合格,经过一年的努力还剩下很多课程设计没有完成,于是自己在家人的要求下,选择在离学校不远的一个亲戚朋友公司里面实习,一方面不会离学校太远,可以方便回学校进行课程的重修和考试,另一方面不用花费太多的经历在工作上,在业余时间可以复习考试。

虽然公司不是典型的IT和软件公司,但是也属于计算机领域的范畴,主要业务是电脑的安装和维修、服务器的安装和维修。

对于在学校里面只接触到软件和基础理论知识的计算机学生来说,也是一个很好地机会去熟悉计算机硬件方面的业务和实践知识。

虽然动手实践并没有像理论知识那样复杂和深奥,但是却需要反复的实践才能很好地掌握,对于一个没有经常接触计算机硬件的人来说,很多地方看起来简单但是实际操作起来却不知所措,这就是理论和动手实践的差别。

通过一个月来的实习,通过多次亲自动手来组装台式机电脑和参观实验室的服务器,自己熟练的掌握了计算机硬件的组装和系统安装过程,以及基本的电脑维修技术,对于计算硬件有了更详细的了解和更亲切的体会。

2、实习内容记述在一个月的实习过程中,主要的内容围绕着台式机组装和操作系统安装展开,当然也包含一些琐碎的事情,包括送修主板、显示器;到客户家里维修电脑;帮外地客户的组装电脑发货运以及在水果店里安装监控等。

主要的内容选取以下4个作为重点介绍;学习组装台式机和安装操作系统最开始的时候是公司的部门经理王经理,跟我讲解和演示装机的具体过程,大概分为一下几个步骤;硬件组装部分:在主板上安装CPU和CPU风扇;在主板上安装内存条;在机箱中安装电源;把主板安放进机箱并固定,插上主板供电;在机箱内安装硬盘和光驱,连接上SATA线和供电线;把机箱中的开机键、重启键等线连接上主板,并整理好机箱内的线路;检查有无错误,准备插上电源线开始装系统。

装系统部分:开机按DEL键设置BIOS,现在的机器都支持快速启动,可以开机按F12选择启动项进行启动;进入WINPE系统,将硬盘进行分区格式化,然后启动手动Ghost工具,讲系统文件拷贝到硬盘的主分区之中;重启机器,电脑自动安装系统和公用驱动,安装完成之后查看设备管理器,看有没有安装好的驱动;用光盘安装主板的驱动,选择需要安装的驱动,完成之后再查看设备管理器;之后设置Realtek音频管理器,使之能够使用前面的音频接口,同时调整录音设备的音量;连接上网线看是否能够上网,基本没有问题了就可以关机封箱了。

计算机网络实验(华科)

计算机网络实验(华科)

NetBIOS 远程计算机名称表
名称
类型
---------------------------------------------
D169
<00> 唯一
WORKGROUP
<00> 组
D169
<20> 唯一
WORKGROUP
<1E> 组
状态
已注册 已注册
已注册 已注册
MAC 地址 = 8C-89-A5-25-B1-83
指令:arp -a 222.20.69.254 >>g:\显示指定网络地址的 ARP 信息.txt
接口: 222.20.69.237 --- 0xd
Internet 地址
物理地址
类型
222.20.69.254
00-1a-a9-15-6c-8f 动态
指令:arp -s 222.20.69.239 00-aa-bb-cc-dd-ff >>g:\添加 ARP 表项.txt
WORKGROUP
<00> 组
ZJL-PC
<20> 唯一
状态
已注册 已注册
已注册
Wi-Fi: 节点 IP 址址: [0.0.0.0] 范围 ID: []
缓存中没有名称
⑷ net:
许多 Windows 2000 网络命令都以词 net 开头。
由于在 windows XP 之后的操作系统版本中已经没有 Messenger 服务 了,故此处粘贴实验记录,但是我在实验室的 XP 上实现了用 Net send 对 话.
指令:nbtstat -n >>g:\列出本地 NetBIOS 名称.txt 以太网: 节点 IP 址址: [222.20.69.237] 范围 ID: []

华科 计算机网络 实验报告1

华科 计算机网络 实验报告1

电子与信息工程系实验报告实验名称Windows Socket 编程(Duplex-talk)课程名称计算机网络姓名张建佳学号U201013086日期2012-03-21地点南一楼东203成绩教师徐晶1.实验目的1.掌握网络应用程序的开发方法;2.掌握Client/ Server 结构软件的设计与开发方法3.掌握Socket 机制的工作原理2.实验环境操作系统:Windows 7开发环境:Visual Studio 2010,VC63.实验内容与结果2.修改simplex-talk 程序,编制duplex-talk 程序,支持client 和server 的双向通信(1)程序整体功能Client端程序连接Server端程序,Client能给Server发送信息,同时Server也能给Client 发送信息,实现双向通信;(2) 程序组成及各模块/函数功能Client 端传入server端的主机号将server端的主机号转换为IP地址发起一个socket连接请求判断连接是否成功报错,退出NServer发送信息关闭连接接收信息判断信息是否为空YNY监听等到Client 的连接请求建立与Client 的连接判断信息是否为空 NY 退出程序(3)程序清单(见附件) (4)程序的运行和测试结果编译源文件,生成可执行文件并运行,其过程如下: Client 端 Socket 端server.exe[simplex -talk server] server is ready in listening ...client.exe localhost [simplex -talk server] received a connectionfrom 127.0.0.1 :[simplex -talk client] connection to localhost is ready[simplex -talk client] please input your message (empty input to halt): Hello,Server.[simplex -talk client] send 14 chars to server [simplex -talk server] received 14 charsHello,Server.接收信息关闭连接发送信息判断信息是否为空NN判断信息是否为空YY退出程序运行结果截图ClientServer4.实验中的问题暂无附件1.程序源代码(1)socket-client.cSocket-server.c。

华科操作系统实验报告

华科操作系统实验报告

课程实验报告课程名称:操作系统原理专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院目录目录 (2)实验一:线程的同步 (3)一、实验目的 (3)二、实验内容 (3)三、实验心得 (6)实验二:誊抄实验的进程实现 (7)一、实验目的 (7)二、实验内容 (7)三、实验心得 (10)实验三:Linux文件目录操作 (12)一、实验目的 (12)二、实验内容 (12)三、实验心得 (14)实验一:线程的同步一、实验目的1、掌握Linux系统用户界面中键盘命令的使用。

2、学会一种Linux下的编程环境。

3、掌握Linux下进(线)程的概念。

4、了解Linux进程同步与通信的主要机制,并通过信号灯操作实现进程间的同步与互斥。

二、实验内容1、程序要求两个线程,共享公共变量a线程1负责计算(+1)线程2负责打印2、运行环境软件配置(含操作系统版本):ubuntu - 14.10硬件:PC3、源程序源程序:#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <sys/types.h>#include <sys/sem.h>#include <sys/ipc.h>int semid;int a=0;typedef union senum{int val;struct semid_ds *buf;unsigned short *array;struct seminfo *_buf;}SEM_CTL_UN;void P(int semid,int index){struct sembuf sem; sem.sem_num = index; sem.sem_op = -1;//P sem.sem_flg = 0;//biaoji semop(semid,&sem,1); }void V(int semid,int index) {struct sembuf sem; sem.sem_num = index; sem.sem_op = 1; sem.sem_flg = 0; semop(semid,&sem,1); }void* thread1(void *arg) {int i=0;for(i;i<8;i++){P(semid,0);printf("add:\n");a=a+1;printf("a=%d\n",a);V(semid,1);}}void* thread2(void *arg) {int i=0;for(i;i<8;i++){P(semid,1);printf("print:\n");printf("a=%d\n",a);V(semid,0);}}int main(){pthread_t id1,id2;int ret1,ret2;key_t key;SEM_CTL_UN semctlarg1;SEM_CTL_UN semctlarg2;key=1;semid=semget(key,2,IPC_CREAT|0666);//创建semctlarg1.val=1;semctlarg2.val=0;semctl(semid,0,SETV AL,semctlarg1);//初始化semctl(semid,1,SETV AL,semctlarg2);ret1=pthread_create(&id1,NULL,thread1,NULL);ret2=pthread_create(&id2,NULL,thread2,NULL);pthread_join(id1,NULL);pthread_join(id2,NULL);}4、实验结果实验结果截图如下:图1-1 线程同步三、实验心得通过本次实验,我掌握了Linux系统用户界面中键盘命令的使用,熟悉了Linux下的编程环境,进一步理解并掌握了线程的概念,了解了线程同步与通信的主要机制,并能通过信号灯操作实现线程间的同步和互斥。

华北科技学院计算机系综合性实验报告

华北科技学院计算机系综合性实验报告

华北科技学院计算机系综合性实验
实验报告
课程名称网络数据库
实验学期 2011 至 2012 学年第 2 学期学生所在系部计算机学院
年级 09级专业班级网络B093班
学生姓名沈亚强学号_ 200907034313 任课教师孙改平
实验成绩
计算机系制
《网络数据库》课程综合性实验报告
查询所有学生选课的信息及选课成绩信息图:
当学生成绩更改的值超过100或者低于0的值,将返回错误提醒。

(2)从三个表中的连接中返回指定学生的学号、姓名、所选课程名称及该课程的成绩,存储过程在参数中使用了模式匹配。

(2)创建触发器,在删除xsb表中的一条学生记录时将cjb表中该学生的相应记录也删除。

3、同时利用DENY命令可以拒绝当前数据库内的用户授予的权限,并防止数据库用户通过其组或角色成员资格继承权限;最后可利用REVOKE命令可撤销以前给当前数据库用户授予或拒绝的权限,使得用户对数据库无任何访问权限和操作。

华中科技大学大学计算机学院--数据库实验报告

华中科技大学大学计算机学院--数据库实验报告
select distinct sno from spj , p where spj.pno=p.pno and jno='J1' and color='红';
※查询结果:(图 2-3 所示)
图 2-3 查询结果
______________________ 第 6 页/共 25 页
华中科技大学
计算机学院数据库系统概论实验报告
create table p ( pno varchar(20) primary key, pname varchar(20), color varchar(20), weight varchar(20));
create table j ( jno varchar(20) primary key, jname varchar(20), city varchar(20));
图 3-3 查询结果
______________________ 第 8 页/共 25 页
华中科技大学
计算机学院数据库系统概论实验报告
U201014281
(4)找出工程项目 J2 使用的各种零件的名称及其数量; ※查询语句为:
select p.pname,spj.qty from spj,p where spj.pno=p.pno and jno='J2'; ※查询结果:(图 3-4 所示)
select pname,color,weight from p; ※查询结果:(图 3-2 所示)
图 3-2 查询结果
(3)找出使用供应商 S1 所提供零件的工程号码; ※查询语句为:
select distinct pno from spj where sno='S1'; ※查询结果:(图 3-3 所示)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程实验报告课程名称:计算机系统基础专业班级:学号:姓名:指导教师:报告日期:年月日计算机科学与技术学院目录实验1: (1)实验2: (7)实验3: (24)实验总结 (34)实验1:数据表示1.1 实验概述实验目的:更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。

实验目标:加深对数据二进制编码表示的了解。

实验要求:使用有限类型和数量的运算操作实现一组给定功能的函数。

实验语言:c。

实验环境:linux1.2 实验内容需要完成bits.c中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。

1)位操作表1列出了bits.c中一组操作和测试位组的函数。

其中,“级别”栏指出各函数的难度等级(对应于该函数的实验分值),“功能”栏给出函数应实现的输出(即功能),“约束条件”栏指出你的函数实现必须满足的编码规则(具体请查看bits.c中相应函数注释),“最多操作符数量”指出你的函数实现中允许使用的操作符的最大数量。

你也可参考tests.c中对应的测试函数来了解所需实现的功能,但是注意这些测试函数并不满足目标函数必须遵循的编码约束条件,只能用做关于目标函数正确行为的参考。

表1 位操作题目列表2)补码运算表2列出了bits.c中一组使用整数的补码表示的函数。

可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。

表2 补码运算题目列表3)浮点数操作表3列出了bits.c中一组浮点数二进制表示的操作函数。

可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。

注意float_abs的输入参数和返回结果(以及float_f2i函数的输入参数)均为unsigned int类型,但应作为单精度浮点数解释其32 bit二进制表示对应的值。

表3 浮点数操作题目列表表示,当输入参数是NaN 时,返回NaN 号整型操作,包括||,&&以及if,while控制结构4 float_f2i 返回浮点数‘f’的强制整型转换“(int)f”表示仅能使用任何整型/无符号整型操作,包括||,&&以及if,while控制结构301.3 实验设计根据题目要求,选择合适的操作符来编写代码。

具体设计参考实验过程中的代码注释。

1.4 实验过程阅读相应的函数要求,利用合适的操作符编写代码。

如下:1.lsbZero函数:图1.12.byteNot函数:图1.23.byteXor函数:图1.34.logicalAnd函数:图1.45.logicalOr函数:图1.5 6.rotateLeft函数:图1.6 7.parityCheck函数:图1.7 8.mul2OK函数:图1.8 9.mult3div2函数:图1.9 10.subOK函数:图1.10 11.absVal函数:图1.1112.float_abs函数:图1.1213.float_f2i函数:图1.131.5实验结果1.使用dlc检查函数实现代码是否符合实验要求的编码规则。

a)首先./dlc bits.c直接检测是否有错误。

如图1.14所示:图1.14由图知,输出Compilation Successful(1 warning),故bits.c文件编写无误符合要求。

b)然后用-e选项调用dlc,观察操作符数。

如图1.15所示:图1.152.使用 btest 检查函数实现代码的功能正确性。

a)首先使用make编译生成btest可执行程序,如图1.16所示:图1.16b)然后调用 btest 命令检查 bits.c中所有函数的功能正确性。

如图1.17所示:图1.17由图知,得分全拿到了,故bits.c文件中函数功能都实现了。

1.6实验小结这次实验让我更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。

尤其是加深对数据二进制编码表示的了解。

通过使用有限类型和数量的运算操作实现一组给定功能的函数来提高了我对数据表示方面的C语言编程能力。

总之这次实验的过程整体还是很愉快的,耗时不是很长但是收获很大!实验2:拆弹实验2.1 实验概述实验目的:增强对程序的机器级表示、汇编语言、调试器和逆向工程等方面原理与技能的掌握。

实验目标:需要拆除尽可能多的炸弹。

实验要求:使用gdb调试器和objdump来反汇编炸弹的可执行文件,并单步跟踪调试每一阶段的机器代码,从中理解每一汇编语言代码的行为或作用,进而设法“推断”出拆除炸弹所需的目标字符串。

实验语言:c。

实验环境:linux2.2 实验内容一个“binary bombs”(二进制炸弹,下文将简称为炸弹)是一个Linux可执行C程序,包含了6个阶段(phase1~phase6)。

炸弹运行的每个阶段要求你输入一个特定的字符串,若你的输入符合程序预期的输入,该阶段的炸弹就被“拆除”,否则炸弹“爆炸”并打印输出 "BOOM"字样。

实验的目标是拆除尽可能多的炸弹层次。

每个炸弹阶段考察了机器级语言程序的一个不同方面,难度逐级递增:* 阶段1:字符串比较* 阶段2:循环* 阶段3:条件/分支* 阶段4:递归调用和栈* 阶段5:指针* 阶段6:链表/指针/结构另外还有一个隐藏阶段,但只有当你在第4阶段的解之后附加一特定字符串后才会出现。

为了完成二进制炸弹拆除任务,你需要使用gdb调试器和objdump来反汇编炸弹的可执行文件,并单步跟踪调试每一阶段的机器代码,从中理解每一汇编语言代码的行为或作用,进而设法“推断”出拆除炸弹所需的目标字符串。

这可能需要你在每一阶段的开始代码前和引爆炸弹的函数前设置断点,以便于调试。

2.2.1 阶段1 字符串比较1.任务描述:通过phase_1的反汇编代码找出要输入的字符串。

2.实验设计:利用gdb结合断点来动态地分析。

3.实验过程:观察phase_1的反汇编代码,如图2.1.1所示:图2.1.1发现在调用strings_not_equal对比字符串之前,有一个地址送入了堆栈,大胆猜测该地址就是正确字符串的首址,于是在phase_1处下个断点,运行至此处后,用x命令查看字符串。

如图2.1.2所示:图2.1.2故猜测“Border relations with Canada have never been better.”就是所需字符串。

重新执行该程序,直接输入该字符串,观察结果。

如图2.1.3所示:图2.1.34.实验结果:如图2.1.3所示,阶段一拆弹成功!阶段一很简单,当初的找出字符串首地址就可以了,没有什么大的难点。

2.2.2 阶段2 循环1.任务描述:通过phase_2的反汇编代码推断第二阶段要输入的数据2.实验设计:利用gdb结合断点来动态地分析3.实验过程:观察phase_1的前一部分反汇编代码,如图2.2.1所示:图2.2.1发现输入的应该是六个数字,而且要求[esp+0x18]必须大于等于0才行,于是测试输入“0 1 2 3 4 5”,观察这些数字在调用read_six_numbers后是如何存放在栈中的,如图2.2.2所示:图2.2.2观察到执行read_six_numbers后,输入的数字依次存放在esp+0x18、esp+0x1c、esp+0x20、esp+0x24、esp+0x28、esp+0x2c中,故对输入的数字首先就要有第一个数不能小于0。

继续观察phase_2的后一部分反汇编代码,如图2.2.3所示:图2.2.3能容易发现这是一个循环,首先将ebx赋值为1,然后比较[esp+ebx*4+0x14]加上ebx与[esp+ebx*4+0x18]是否相等,相等就ebx加一继续执行,直到ebx 等于6后退出。

然后来分析应该输入的值。

第一个数只要大于等于0就可以。

不妨就输入0。

他将会被保存在esp+0x18处。

所以ebx等于1时,有[esp+ebx*4+0x18]=[esp+0x1c]=[esp+ebx*4+0x14]+ebx=[esp+0x18]+1。

故第二个输入的数字应该为0+1=1。

同理分析可得后面的数依次为3、6、10、15。

故这六个数依次为0、1、3、6、10、15。

重新执行该程序,直接输入“0 1 3 6 10 15”,观察结果。

如图2.2.4所示:图2.2.44.实验结果:如图2.2.4所示,阶段二拆弹成功!阶段二涉及到了小的循环,慢慢的依次执行很同意就能发现规律,也不是很难。

2.2.3 阶段3 条件/分支1.任务描述:通过phase_3的反汇编代码推断第三阶段要输入的数据2.实验设计:利用gdb结合断点来动态地分析3.实验过程:观察phase_3的前一部分反汇编代码,如图2.3.1所示:图2.3.1发现输入的应该要求__isoc99_sscanf@plt的返回值大于1,于是观察调用__isoc99_sscanf@plt时格式字符串的值,在0x8048c23处下断点然后进入函数单步调试,并测试输入“0 1 2 3 4”,如图2.3.2所示:图2.3.2观察到格式字符串为“%d %d”,故只需输入两个数字即可。

同phase_2操作可以发现输入的数字依次存放在esp+0x18、esp+0x1c中。

继续观察phase_3的后一部分反汇编代码,如图2.3.3所示:图2.3.3可以显然的发现一个数字要求不能比0x7大,然后就会将第一个数字送入eax中,然后跳转至[eax*4+0x804a1c0]处执行,显然是个分支程序。

重新调试程序输入“1 100”,观察执行到0x8048c86处eax的值,即第二个数应该的值。

如图2.3.4所示:图2.3.4故第二个数为61。

重新执行该程序,直接输入“1 61”,观察结果。

如图2.3.5所示:图2.3.54.实验结果:如图2.3.5所示,阶段三拆弹成功!阶段三用到了分支,由于没有必要弄懂整个分支的功能,只要选择其中的某一路就可以了,所以解决起来也不是很难,单步执行下去就能很快的找到第二个输入的正确值。

2.2.4 阶段4 递归调用和栈1.任务描述:通过phase_4以及func4的反汇编代码推断第四阶段要输入的数据2.实验设计:利用gdb结合断点来动态地分析3.实验过程:观察phase_4的前一部分反汇编代码,如图2.4.1所示:图2.4.1发现输入的应该要求__isoc99_sscanf@plt的返回值等于2,于是同阶段三一样测试观察调用__isoc99_sscanf@plt时格式字符串的值,发现为仍然为“%d %d”,而且[esp+0x18]要求小于等于0xe。

如图2.4.2所示:图2.4.2继续观察phase_4的后一部分反汇编代码,如图2.4.3所示:图2.4.3可以不难发现依次将输入的第一个数,以及0x0和0xe作为参数传给func4,要求返回值为0xf而且输入的第二个数与0xf相等才不会爆炸。

相关文档
最新文档