摘要:注:本文为以后pci模拟做的相关资料调研及整理。PCI有三个相互独立的物理地址空间:设备存储器地址空间、I/O地址空间和配置空间。配置空间是PCI所特有的一个物理空间。由于PCI支持设备即插即用,所以PCI设备不占用固定的内存地址空间或I/O地址空间,而是由操作系统决定其映射的基址。 系统加电时,BIOS检测PCI总线,确定所有连接在PCI总线上的设备以及它们的配置要求,并进行系统配置。所以,所有的PCI设备必须实现配置空间,从而能够实现参数的自动配置,实现真正的即插即用。 PCI总线可以通过桥芯片级连.按与CPU总线所隔的桥数目和同一层总线的扫描顺序,从0开始依次编号,扩展最多N256...
阅读全文
摘要:这个题的本质是让通过gdb和objdump的工具的使用,以及对汇编代码的理解找到程序在栈中已存在的数据或者汇编代码本身的代码逻辑。从而根据固有信息确定输入,使得炸弹得以解除。这个实验有6道关卡和一道隐藏关卡。由于时间原因,我并没有想方法找出隐藏关,只是把固有的6道关卡做完了。下面说一下解题步骤。 由于炸弹爆炸是要扣分的,所以最开始需要做的任务是在炸弹爆炸函数的入口设置一个断点。这样一来当发现运行到这个断点之后就可以重新开始gdb的运行,使得爆炸函数得不到运行。由于是只有通过前一关后才能做后一关所以当做到后面几关的时候,要把前几关的答案放在一个文档里,然后运行gdb时指定这个文件,就会自动...
阅读全文
摘要:最近做网络的实验题需要对内存进行操作。比如说对于一个数组char tempstr[2];tempstr[0] = 'a';tempstr[1] = 'b';要取十六位赋给一个unsigned short型的变量。对于这种要求有一下几种作法:1:unsigned short temp = 0;temp = *(unsigned short *) tempstr;cout << htons(temp)<<endl;但是这种做法有个问题就是x86架构的计算机采用的是小端序。所以对于这种情况在转换的过程中会把a放在低八位,把b放在高八位。但是这题
阅读全文
摘要:引子无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到 make或 make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以轻而易举的理顺各个源文件之间纷繁复杂的相互关系。但是如果通过查阅make的帮助文档来手工编写Makefile,对任何程序员都是一场挑战。幸而有GNU 提供的Autoconf及Automake这两套工具使得编写makefile不再是一个难题。本文将介绍如何利用 GNU Aut
阅读全文
摘要:~~~~~~~~~~~题目要求~~~~~~~~~~~一个项目由一个lex文件, 一个c文件构成, 其中文件lexer.l 代码如下%{int fee_count = 0;int fie_count = 0;int foe_count = 0;int fum_count = 0;%}%%fee fee_count++;fie fie_count++;foe foe_count++;fum fum_count++;.\ncountwords.c文件代码如下#include <stdio.h>extern int fee_count, fie_count, foe_count, fum_
阅读全文
摘要:1:线性拟合根据斜截式y = ax+b。这样拟合的缺点是必须非常清楚图中的点分别属于哪条直线。而且不能有噪声出现。a=0.75;b=0.6;x = (0:10)';y = a*x+b+(rand(11,1)-0.5)*0.9;A = [x ones(11,1)];yy = (0:10);coeff = pinv(A) * y; %coeff中为拟合的直线的斜截figure;scatter(x,y);line([0,10],[coeff(2),coeff(1)*10+coeff(2)]);2:平面曲线拟合五个点可以确定一个非退化的平面曲线。可以同线性拟合一样有AB = 0(AB均为矩阵)
阅读全文
摘要:简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.一般来说, 段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的 gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是
阅读全文
摘要:1:可以把命令的输出结果当作一个字符串,必要时可以直接用在循环体中。2:tr 'a-z' 'A-Z'` <<< $temp 可以把字符串的内容输给tr,也可以用管道temp=`echo $filename | tr 'A-Z' 'a-z'` 。3:用find命令可以输出一个目录的所有文件和子目录及其文件下面是将一个目录的所有文件和子目录及子目录的文件和子目录(递归)的名字都该为小写。#!/bin/shchange(){for filename in `ls`dotemp=`echo $filename | tr
阅读全文
摘要:printf(内核态为printk)是我觉得最好的调试工具,我碰到的大部分问题也是通过在代码中打印调试信息来分析错误源的位置,但当我们写的代码需要发布时,这些调试信息则是多余的,而当我们再次发现bug时,可能又需要加入一些调试信息,于是我们可能想寻求一种方法可以控制print函数是否打印调试信息,预处理宏可帮助我们实现这一功能。#undef PDEBUG /* undef it, just in case */#ifdef DNFS_DEBUG# ifdef __KERNEL__/* This one if debugging is on, and kernel space */# defin
阅读全文
摘要:``把其中的内容当作系统命令来执行""可以输出反馈''屏蔽test用于条件测试 也可用[ ] 括起来,注意 -a是且,-o为或,eq 数值相等。-ne 数值不相等。-gt 第一个数大于第二个数。-lt 第一个数小于第二个数。-le 第一个数小于等于第二个数。-ge 第一个数大于等于第二个数。expr可以用来数值计算,判等(输出1为真,与系统输出相反),模式匹配,其功能为计算字符串的字符数,抽取文件附属名
阅读全文
摘要:一 通常的函数调用一个通常的函数调用的例子://自行包含头文件void MyFun(int x); //此处的申明也可写成:void MyFun( int );int main(int argc, char* argv[]){ MyFun(10); //这里是调用MyFun(10);函数 return 0;}void MyFun(int x) //这里定义一个MyFun函数{ printf(“%d\n”,x);} 这个MyFun函数是一个无返回值的函数,它并不完成什么事情。这种调用函数的格式你应该是很熟悉的吧!看主函数中调用MyFun函数的书写格式:MyFun(10); 我...
阅读全文
摘要:本来任务要求的是用perl实现cgi脚本即可。但是普通的方法都会刷新页面。我想要的结果是不刷新页面,在原页面上进行交互。即通过cgi返回的信息可以作为原网页的部分内容。所以这需要用到ajax。 很遗憾,在网上没有多少相关的资料。而且手边的教科书上没有说到perl和ajax的结合运用。自己胡乱摸索了一下,已经成功实现不离开页面将信息传给服务器端的cgi脚本,并将服务器端传回来的反馈信息得到,通过javascript动态改变页面内容。但是一个头疼的问题是,通过innerHTML改变div的内容后,页面会自动刷新。使得反馈信息在原页面上一闪而过。没有解决。懒得弄得了。暂时吧源码贴在这。<scr
阅读全文