存档

2006年3月 的存档

经典蓝屏案意义破解

2006年3月29日 没有评论

┌—┐ 
│ 1│ 
└—┘0x0000000A:IRQL_NOT_LESS_OR_EQUAL 
◆错误分析:主要是由问题的驱动程序、有缺陷或不兼容的硬件与软件造成的. 从技术角度讲. 表明在内核模式中存在以太高的进程内部请求级别(IRQL)访问其没有权限访问的内存地址. 
◇解决方案:请用前面介绍的解决方案中的2、3、5、8、9方案尝试排除. 

┌—┐ 
│ 2│ 
└—┘0x00000012:TRAP_CAUSE_UNKNOWN 
◆错误分析:如果遇到这个错误信息, 那么很不幸, 应为KeBudCheck分析的结果是错误原因未知. 
◇解决方案:既然微软都帮不上忙, 就得靠自己了, 请仔细回想这个错误是什么时候出现的; 第一次发生时你对系统做了哪些操作; 发生时正在进行什么操作. 从这些信息中找出可能的原因, 从而选择相应解决方案尝试排除. 

┌—┐ 
│ 3│ 
└—┘0x0000001A:MEMORY_MANAGEMENT 
◆错误分析:这个内存管理错误往往是由硬件引起的, 比如: 新安装的硬件、内存本身有问题等. 
◇解决方案:如果是在安装Windows时出现, 有可能是由于你的电脑达不到安装Windows的最小内存和磁盘要求. 

┌—┐ 
│ 4│ 
└—┘0x0000001E:KMODE_EXCEPTION_NOT_HANDLED 
◆错误分析:Windows内核检查到一个非法或者未知的进程指令, 这个停机码一般是由问题的内存或是与前面0x0000000A相似的原因造成的. 
◇解决方案: 
(1)硬件兼容有问题:请对照前面提到的最新硬件兼容性列表, 查看所有硬件是否包含在该列表中. 
(2)有问题的设备驱动、系统服务或内存冲突和中断冲突: 如果在蓝屏信息中出现了驱动程序的名字, 请试着在安装模式或者故障恢复控制台中禁用或删除驱动程序, 并禁用所有刚安装的驱动和软件. 如果错误出现在系统启动过程中, 请进入安全模式, 将蓝屏信息中所标明的文件重命名或者删除. 
(3)如果错误信息中明确指出Win32K.sys: 很有可能是第三方远程控制软件造成的, 需要从故障恢复控制台中将对该软件的服务关闭. 
(4)在安装Windows后第一次重启时出现:最大嫌疑可能时系统分区的磁盘空间不足或BIOS兼容有问题. 
(5)如果是在关闭某个软件时出现的:很有可能时软件本省存在设计缺陷, 请升级或卸载它 

┌—┐ 
│ 5│0x00000023:FAT_FILE_SYSTEM 
└—┘0x00000024:NTFS_FILE_SYSTEM 
◆错误分析:0x00000023通常发生在读写FAT16或者FAT32文件系统的系统分区时, 而0x00000024则是由于NTFS.sys文件出现错误(这个驱动文件的作用是容许系统读写使用NTFS文件系统的磁盘). 这两个蓝屏错误很有可能是磁盘本身存在物理损坏, 或是中断要求封包(IRP)损坏而导致的. 其他原因还包括:硬盘磁盘碎片过多; 文件读写操作过于频繁, 并且数据量非常达或者是由于一些磁盘镜像软件或杀毒软件引起的. 
◇解决方案: 
第一步:首先打开命令行提示符, 运行\\"Chkdsk /r\\"(注:不是CHKDISK, 感觉象这个, 但是……)命令检查并修复硬盘错误, 如果报告存在怀道(Bad Track), 请使用硬盘厂商提供的检查工具进行检查和修复. 
第二步:接着禁用所有即使扫描文件的软件, 比如:杀毒软件、防火墙或备份工具. 
第三步:右击C:\\winnt\\system32\\drivers\\fastfat.sys文件并选择\\"属性\\", 查看其版本是否与当前系统所使用的Windows版本相符.(注:如果是XP, 应该是C:\\windows\\system32\\drivers\\fastfat.sys) 
第四步:安装最新的主板驱动程序, 特别IDE驱动. 如果你的光驱、可移动存储器也提供有驱动程序, 最好将它们升级至最新版. 

┌—┐ 
│ 6│ 
└—┘0x00000027:RDR_FILE_SYSTEM 
◆错误分析:这个错误产生的原因很难判断, 不过Windows内存管理出了问题很可能会导致这个停机码的出现. 
◇解决方案:如果是内存管理的缘故, 通常增加内存会解决问题. 

┌—┐ 
│ 7│ 
└—┘0x0000002E:DATA_BUS_ERROR 
◆错误分析:系统内存存储器奇偶校验产生错误, 通常是因为有缺陷的内存(包括物理内存、二级缓存或者显卡显存)时设备驱动程序访问不存在的内存地址等原因引起的. 另外, 硬盘被病毒或者其他问题所损伤, 以出现这个停机码. 
◇解决方案: 
(1)检查病毒 
(2)使用\\"chkdsk /r\\"命令检查所有磁盘分区. 
(3)用Memtest86等内存测试软件检查内存. 
(4)检查硬件是否正确安装, 比如:是否牢固、金手指是否有污渍. 

┌—┐ 
│ 8│ 
└—┘0x00000035:NO_MORE_IRP_STACK_LOCATIONS 
◆错误分析:从字面上理解, 应该时驱动程序或某些软件出现堆栈问题. 其实这个故障的真正原因应该时驱动程序本省存在问题, 或是内存有质量问题. 
◇解决方案:请使用前面介绍的常规解决方案中与驱动程序和内存相关的方案进行排除. 

┌—┐ 
│ 9│ 
└—┘0x0000003F:NO_MORE_SYSTEM_PTES 
◆错误分析:一个与系统内存管理相关的错误, 比如:由于执行了大量的输入/输出操作, 造成内存管理出现问题: 有缺陷的驱动程序不正确地使用内存资源; 某个应用程序(比如:备份软件)被分配了大量的内核内存等. 
◇解决方案:卸载所有最新安装的软件(特别是哪些增强磁盘性能的应用程序和杀毒软件)和驱动程序. 

┌—┐ 
│10│ 
└—┘0x00000044:MULTIPLE_IRP_COMPLIETE_REQUESTS 
◆错误分析:通常是由硬件驱动程序引起的. 
◇解决方案:卸载最近安装的驱动程序. 这个故障很少出现, 目前已经知道的是, 在使用http://www.in-system.com/这家公司的某些软件时会出现, 其中的罪魁就是Falstaff.sys文件.(作者难道不怕吃官司嘛, 把公司网址公布) 

┌—┐ 
│11│ 
└—┘0x00000050:PAGE_FAULT_IN_NONPAGED+AREA 
◆错误分析:有问题的内存(包括屋里内存、二级缓存、显存)、不兼容的软件(主要是远程控制和杀毒软件)、损坏的NTFS卷以及有问题的硬件(比如:PCI插卡本身已损坏)等都会引发这个错误. 
◇解决方案:请使用前面介绍的常规解决方案中与内存、软件、硬件、硬盘等相关的方案进行排除. 

┌—┐ 
│12│ 
└—┘0x00000051:REGISTRY_ERROR 
◆错误分析:这个停机码说明注册表或系统配置管理器出现错误, 由于硬盘本身有物理损坏或文件系统存在问题, 从而造成在读取注册文件时出现输入/输出错误. 
◇解决方案:使用\\"chkdsk /r\\"检查并修复磁盘错误. 

┌—┐ 
│13│ 
└—┘0x00000058:FTDISK_INTERNAL_ERROR 
◆错误分析:说明在容错集的主驱动发生错误. 
◇解决方案:首先尝试重启电脑看是否能解决问题, 如果不行, 则尝试\\"最后一次正确配置\\"进行解决. 

┌—┐ 
│14│ 
└—┘0x0000005E:CRITICAL_
SERVICE_FAILED 
◆错误分析:某个非常重要的系统服务启动识别造成的. 
◇解决方案:如果是在安装了某个新硬件后出新的, 可以先移除该硬件, 并通过网上列表检查它是否与Windows 2K/XP兼容, 接着启动电脑, 如果蓝屏还是出现, 请使用\\"最后一次正确配置\\"来启动Windows, 如果这样还是失败, 建议进行修复安装或是重装. 

┌—┐ 
│15│ 
└—┘0x0000006F:SESSION3_INITIALIZATION-FAILED 
◆错误分析:这个错误通常出现在Windows启动时, 一般是由有问题的驱动程序或损坏的系统文件引起的. 
◇解决方案:建议使用Windows安装光盘对系统进行修复安装. 

┌—┐ 
│16│ 
└—┘0x00000076:PROCESS_HAS_LOCKED_PAGES 
◆错误分析:通常是因为某个驱动程序在完成了一次输入/输出操作后, 没有正确释放所占有的内存 
◇解决方案: 
第一步:点击开始–>运行:regedt32, 找到[HKLM\\SYSTEM\\Currentcontrol set\\control\\session manager\\memory management], 在右侧新建双字节值\\"TrackLockedPages\\", 值为1. 这样Windows便会在错误再次出现时跟踪到是哪个驱动程序的问题. 
第二步:如果再次出现蓝屏, 那么错误信息会变成: 
STOP:0x0000000CB(0xY,0xY,0xY,0xY)DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS 
其中第四个\\"0xY\\"会显示为问题驱动程序的名字, 接着对其进行更新或删除. 
第三步:进入注册表, 删除添加的\\"TrackLockedPages\\". 

┌—┐ 
│17│ 
└—┘0x00000077:KERNEL_STACK_INPAGE_ERROR 
◆错误分析:说明需要使用的内核数据没有在虚拟内存或物理内存中找到. 这个错误常常于是着磁盘有问题, 相应数据损坏或受到病毒侵蚀. 
◇解决方案:使用杀毒软件扫描系统; 使用\\"chkdsk /r\\"命令检查并修复磁盘错误, 如不行则使用磁盘厂商提供的工具检查修复. 

┌—┐ 
│18│ 
└—┘0x0000007A:KERNEL_DATA_INPAGE_ERROR 
◆错误分析:这个错误往往是虚拟内存中的内核数据无法读入内存造成的. 原因可能是虚拟内存页面文件中存在坏簇、病毒、磁盘控制器出错、内存有问题. 
◇解决方案:首先用升级为最新病毒库杀毒软件查杀病毒, 如果促无信息中还有0xC000009C或0xC000016A代码, 那么表示是坏簇造成的, 并且系统的磁盘检测工具无法自动修复, 这时要进入\\"故障恢复控制台\\", 用\\"chkdsk /r\\"命令进行手动修复. 

┌—┐ 
│19│ 
└—┘0x0000007B:INACESSIBLE_BOOT_DEVICE 
◆错误分析:Windows在启动过程中无法访问系统分区或启动卷. 一般发生在更换主板后第一次启动时, 主要是因为新主板和旧主板的IDE控制器使用了不同芯片组造成的. 有时也可能是病毒或硬盘损伤所引起的. 
◇解决方案:一般只要用安装光盘启动电脑, 然后执行修复安装即可解决问题. 对于病毒则可使用DOS版的杀毒软件进行查杀(主战有kv2005DOS版下载). 如果是硬盘本身存在问题, 请将其安装到其他电脑中, 然后使用\\"chkdsk /r\\"来检查并修复磁盘错误. 

┌—┐ 
│20│ 
└—┘0x0000007E:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED 
◆错误分析:系统进程产生错误, 但Windows错误处理器无法捕获. 其产生原因很多, 包括:硬件兼容性、有问题的驱动程序或系统服务、或者是某些软件. 
◇解决方案:请使用\\"事件查看器\\"来获取更多的信息, 从中发现错误根源.(发现好像不是解决哦, 看来这里大家要自力更生了!) 

┌—┐ 
│21│ 
└—┘0x0000007F:UNEXPECTED_KERNEL_MOED_TRAP 
◆错误分析:一般是由于有问题的硬件(比如:内存)或某些软件引起的. 有时超频也会产生这个错误. 
◇解决方案:用检测软件(比如:Memtest86)检查内存, 如果进行了超频, 请取消超频. 将PCI硬件插卡从主板插槽拔下来, 或更换插槽. 另外, 有些主板(比如:nForce2主板)在进行超频后, 南桥芯片过热也会导致蓝屏, 此时为该芯片单独增加散热片往往可以有效解决问题. 

┌—┐ 
│22│ 
└—┘0x00000080:NMI_HARDWARE_FAILURE 
◆错误分析:通常是有硬件引起的.(似乎蓝屏与硬件错误有不解之缘) 
◇解决方案:如果最近安装了新硬件, 请将其移除, 然后试试更换插槽和安装最新的驱动程序, 如果升级了驱动程序, 请恢复后原来的版本; 检查内存金手指是否有污染和损坏; 扫描病毒; 运行\\"chkdsk /r\\"检查并修复磁盘错误; 检查所有硬件插卡已经插牢. 如果以上尝试都无效果, 就得找专业的电脑维修公司请求帮助了. 

┌—┐ 
│23│ 
└—┘0x0000008E:KERNEL_MODE_EXCEPTION_NOT_HANDLED 
◆错误分析:内核级应用程序产生了错误, 但Windows错误处理器没有捕获. 通常是硬件兼容性错误. 
◇解决方案:升级驱动程序或升级BIOS. 

┌—┐ 
│24│ 
└—┘0x0000009C:MACHINE_CHECK_EXCEPTION 
◆错误分析:通常是硬件引起的. 一般是因为超频或是硬件存在问题(内存、CPU、总线、电源). 
◇解决方案:如果进行了超频, 请降会CPU原来频率, 检查硬件. 

┌—┐ 
│25│ 
└—┘0x0000009F:DRIVER_POWER_STATE_FAILURE 
◆错误分析:往往与电源有关系, 常常发生在与电源相关的操作, 比如:关机、待机或休睡. 
◇解决方案:重装系统, 如果不能解决, 请更换电源. 

┌—┐ 
│26│ 
└—┘0x000000A5:ACPI_BIOS_ERROR 
◆错误分析:通常是因为主板BIOS不能全面支持ACPI规范. 
◇解决方案:如果没有相应BIOS升级, 那么可在安装Windows 2K/XP时, 当出现\\"press F6 if you need to install a third-party SCSI or RAID driver\\"提示时, 按下F7键, 这样Windows便会自动禁止安装ACPI HAL, 而安装 Standard PC HAL. 

┌—┐ 
│27│ 
└—┘0x000000B4:VIDEO_DRIVER_INIT_FAILURE 
◆错误分析:这个停止信息表示Windows因为不能启动显卡驱动, 从而无法进入图形界面. 通常是显卡的问题, 或者是存在与显卡的硬件冲突(比如:与并行或串行端口冲突). 
◇解决方案:进入安全模式查看问题是否解决, 如果可以, 请升级最新的显卡驱动程序, 如果还不行, 则很可能是显卡与并行端口存在冲突, 需要在安全模式按下WIN+break组合键打开\\"系统属性\\", 在硬件–>设备管理器中找到并双击连接打印的LPT1端口的项, 在\\"资源\\"选项卡中取消\\"使用自动配置\\"的构选, 然后将\\"输入/输出范围\\"的\\"03BC\\"改为\\"0378\\". 

┌—┐ 
│28│ 
└—┘0x000000BE:ATTEMPTED_WRITE_TO_READONLY_MEMORY 
◆错误分析:某个驱动程序试图向只读内存写

分类: 杂志 标签:

肇庆学院应届师范类毕业生办理教师资格证程序与要求

2006年3月28日 没有评论

  一、对象范围
  我校应届师范类国家计划的本专科毕业生。
  二、认定条件
  申请认定教师资格者应当符合以下四种条件:中国公民身份、思想品德条件、学历条件
  和教育能力的条件。
  1. 思想品德条件
  拥护中国共产党的领导,热爱社会主义祖国,努力学习邓小平理论,坚持党的基本路线,
  有良好的政治素质和道德品质,遵守宪法和法律,热爱教育事业,履行《教师法》,遵守教师职业道德,为人师表。
  2. 学历条件
  ①申请认定幼儿园教师资格者,必须具备幼儿师范学校毕业及其以上学历;
  ②申请认定小学教师资格者,必须具备中等师范学校毕业及其以上学历;
  ③申请认定初级中学教师资格者,必须具备高等师范专科学校或者其他大学专科毕业及其以上学历;
  ④申请认定高级中学教师资格者,必须具备高等师范院校本科或其他大学本科毕业及其以上学历;
  ⑤申请认定中等职业学校教师资格(包括中等专业学校、技工学校、职业高级中学文化课、专业课教师资格)者,必须具备师范院校本科或者其他大学本科毕业及其以上学历;
  ⑥申请认定中等职业学校实习指导教师资格(包括中等专业学校、技工学校、职业高级中学实习指导教师资格)者,必须具备中等职业学校毕业及其以上学历,并具有相当于助理工程师及其以上专业技术职务或者中级(含中级)以上工人技术等级。
  3. 教育教学能力条件
  ①身体条件:具有良好的身体素质和心理素质,无传染性疾病,无精神病史,能适应
  教育教学工作的需要,按照教师资格申请人员体格检查标准,经教师资格认定机构指定的县级以上医院体检合格,
  ②普通话水平:普通话水平测试达到国家语言文字工作委员会颁布的《普通话水平测
  试等级标准》二级乙等以上标准。
  ③教育学、心理学课程学习要求:掌握教育学、心理学基本原理,并能运用于教育教学实践工作中。非师范教育类专业毕业及虽有师范教育类专业毕业学历但与申请认定的教师资格种类学历要求不一致的申请人,应在省教育厅指定的、国家承认学历的师范教育类学校补修相应层次的教育学、心理学课程并取得合格证书。
  已在高等学校、中等师范学校或者通过国家自学考试等途径,学习过相应层次的教育学、心理学课程,并取得合格证书者,可免修教育学、心理学课程。
  ④教育教学能力:具备承担教育教学工作所必须的基本素质和能力。非师范教育类专业毕业及虽有师范教育类专业毕业学历但与认定的教师资格种类学历要求不一致的申请人,应按照教育教学能力测评办法和标准接受测试,并达到合格标准。
  三、申请人应提交的基本材料
  1. 由本人填写的《教师资格认定申请表》一式2份;
  2. 《申请人思想品德鉴定表》1份;
  3. 身份证复印件,身份证原件由各系进行原件验证,将复印件交到学校职技中心;
  4. 普通话水平测试等级证书复印件,原件由各系进行原件验证,将复印件交到学校职技中心;
  5. 学历证书复印件,原件由各系进行原件验证,将复印件交到学校职技中心;
  6. 体格检查合格证明,由学校统一组织到指定医院进行体检。
  7. 近期大一寸免冠半身正面照片3张。
  8. 成绩单一份(学生本人到教务处打印、并由教务处盖章)。
  四、非师范类申请教师资格证暂无政策文件,如有再另行通知。
  五、收费标准
  师范教育类专业的应届毕业生申请认定教师资格,不需要交纳认定费用,只收取“资格
  证书”工本费6元;体验费按指定医院收费标准直接向医院缴费。
  
  
  办理单位:学生职业技能培训考证管理中心
  网页地址:http://ns6.zqu.edu.cn/jyzd/
  邮箱地址:jyzd@zqu.edu.cn
  联系电话:2716242,2716772(传真)
  联系人:申老师

分类: 大学 标签:

美女!

2006年3月28日 1 条评论

街坊邻居都来看看啊!刚出炉的美女大放送……
/wp-content/uploads/200603/28_101552_828267640.jpg
/wp-content/uploads/200603/28_101605_828265913.jpg
/wp-content/uploads/200603/28_101627_828266399.jpg
/wp-content/uploads/200603/28_101637_828265560.jpg
/wp-content/uploads/200603/28_101646_828267362.jpg
/wp-content/uploads/200603/28_101652_828267882.jpg
/wp-content/uploads/200603/28_101706_828266163.jpg
/wp-content/uploads/200603/28_101715_828264959.jpg
/wp-content/uploads/200603/28_101724_828269496.jpg
/wp-content/uploads/200603/28_101732_828265322.jpg
/wp-content/uploads/200603/28_101748_828269828.jpg
/wp-content/uploads/200603/28_101755_828268498.jpg
/wp-content/uploads/200603/28_101802_828270101.jpg
/wp-content/uploads/200603/28_101814_828264396.jpg
/wp-content/uploads/200603/28_101830_828270536.jpg

分类: 图片 标签:

最经典的12句话

2006年3月26日 没有评论

1  我爱你并不是因为你是谁,而是因为我在你身边的时候我是谁~
    2  没有人值得你流泪,值得你流泪的人是不会让你哭的~
    3  只因为某人不如你所愿爱你,并不意味着你不被别人所爱~
    4  一个真正的朋友会握着你的手,触动你的心~
    5  错过一个人最可怕的方式:坐在他的身旁,你却知道永远都不能拥有他~
    6  永远都不要停止微笑,即使在你难过的时候,说不定有人会因为你的笑容而爱上你~
    7  你可能只是这个世界上的一个人,但对于某个人来说你就是全世界~
    8  不要把时间花在一个不在乎与你一起分享的人身上~
    9  也许上帝让你在遇见那个合适的人之前遇见很多错误的人,所以,当这一切发生的时候,你应该心存感激~
   10 不要因为它的结束而哭,应当为它的发生而笑~
   11 生活中总会有伤害你的人,所以你仍然需要继续相信别人,只是小心些而已~
   12 做一个更好的人,确信在遇见一个新的人之前知道自己是谁,也希望那个人知道你是谁~

分类: 杂志 标签:

还记得年少的时候吗?

2006年3月26日 没有评论

/wp-content/uploads/200603/26_184954_nfmsqg.jpg

分类: 图片 标签:

背包算法

2006年3月25日 没有评论

#include <iostream.h>
#include<iomanip.h>
#include<string.h>
int min(int w,int c)
{int temp;
 if (w<c) temp=w;
 else
 temp=c;
 return temp;
}
int max(int w,int c)
{
 int temp;
 if (w>c) temp=w;
 else
 temp=c;
 return temp;
}
void knapsack(int v[],int w[],int c,int n,int**m)      //求最优值
{
  int jmax=min(w[n]-1,c);
  for(int j=0;j<=jmax;j++)
    m[n][j]=0;
  for(int jj=w[n];jj<=c;jj++)
    m[n][jj]=v[n];
  for(int i=n-1;i>1;i–){                           //递归部分
    jmax=min(w[i]-1,c);
    for(int j=0;j<=jmax;j++)
      m[i][j]=m[i+1][j];
    for(int jj=w[i];jj<=c;jj++)
      m[i][jj]=max(m[i+1][jj],m[i+1][jj-w[i]]+v[i]);
      }
  m[1][c]=m[2][c];
  if(c>=w[1])
     m[1][c]=max(m[1][c],m[2][c-w[1]]+v[1]);
 cout<<"最优值:"<<m[1][c]<<endl;
 for(int l=2;l<=n;l++)
  for(int j=0;j<=c;j++)
  {
   cout<<m[l][j]<<setw(c-1);
 }    
  cout<<endl;
  cout<<"*******************************************"<<endl;
}

int traceback(int **m,int w[],int c,int n,int x[])      //回代,求最优解
{
 cout<<"得到的一组最优解如下:"<<endl;
  for(int i=1;i<n;i++)
  if(m[i][c]==m[i+1][c]) x[i]=0;
  else {x[i]=1;
    c-=w[i];}
  x[n]=(m[n][c])?1:0;
  for(int y=1;y<=n;y++)
  {
   cout<<setw(5)<<x[y];
  }
  return x[n];
  
}
void main()
{
 int n,c;
 int **m;
 cout<<"&&&&&&&&&&&&&&&&&&&&&欢迎使用0-1背包问题程序&&&&&&&&&&&&&&&&&&&"<<endl;
 cout<<"请输入物品个数和重量上限:";
 cin>>n>>c;
   int *v=new int[n+1];
 cout<<"Pls input the property (v[i]):"<<endl;
 for(int i=1;i<=n;i++)
  cin>>v[i];
 int *w=new int[n+1];
 cout<<"Pls input the weight (w[i]):"<<endl;
 for(int j=1;j<=n;j++)
  cin>>w[j];
 int *x=new int[n+1];
 m=new int*[n+1];  //动态的分配二维数组
 for(int p=0;p<n+1;p++)
 {
  m[p]=new int[c+1];

 
 knapsack(v,w,c,n,m);
 traceback(m,w,c,n,x);

}

分类: 大学 标签:

程序设计方法学实验

2006年3月25日 没有评论

1。用分治法对strassen矩阵乘法进行改进。
    备注:比较改进前与改进后两种算法在相同输入规模下的运行时间
2。用动态规划法对0-1背包问题进行算法改进 
    备注:比较改进前后的在相同输入规模下的运行时间
3。用回溯算法解0-1背包问题
    备注:比较算法改进前后的运行时间。

分类: 大学 标签:

数据库下载漏洞攻击技术

2006年3月22日 没有评论

作为脚本漏洞的头号杀手锏——数据库下载漏洞,现在已经被越来越多的人所熟知。在这个信息化技术更新飞快的时代,漏洞产生后随之而来的就是各种应对的招数,比如改数据库的后缀、修改数据库的名字等等。很多人以为只要这么做就可以解决问题了,但事实往往不如你我所愿,即使你这么做了也难逃被高手攻击的命运。为此我们有必要去了解一些攻击的手法,来增强自己的安全技能。 

1.强制下载后缀名为ASP、ASA的数据库文件

大多数的网管为了节省时间,网站上的文章系统、论坛等程序都是直接下载别人的源程序再经过部分修改后使用的。而现在很多人做的ASP源程序都已经将数据库的后缀由原先的MDB改为了ASP或ASA。本来这是好事,但在这个信息极度膨胀的社会,老的方法所能维持的时间毕竟有限。对于ASP或ASA后缀的数据库文件,黑客只要知道它们的存放位置,就能轻易地用迅雷这样的下载软件下载得到。

2.致命符号——#

很多网管以为在数据库前面加个#号就可以防止数据库被下载。是啊,我当时也认为IE是无法下载带有#号的文件的(IE会自动忽略#号后面的内容)。但是“成也萧何,败也萧何”,我们忘记了网页不仅能通过普通的方法访问,而且用IE的编码技术也能访问到。

在IE中,每个字符都对应着一个编码,编码符%23就可以替代#号。这样对于一个只是修改了后缀并加上了#号的数据库文件我们依然可以下载。比如#data.mdb为我们要下载的文件,我们只要在浏览器中输入%23data.mdb就可以利用IE下载该数据库文件,这样一来,#号防御手段就形同虚设一般。

3.破解Access加密数据库易如反掌

有些网管喜欢对Access数据库进行加密,以为这样一来就算黑客得到了数据库也需要密码才能打开。但事实正好相反,由于Access的加密算法太脆弱,所以黑客只要随便到网上找一个破解Access数据库密码的软件,不用几秒钟就能得到密码。这样的软件网上有很多,比如Accesskey。

4.瞬杀——数据暴库技术

本身数据库暴库技术应该是属于脚本漏洞的行列,之所以拿到这里来说是因为它在数据库下载漏洞中起到了举足轻重的作用,如果仔细一点,读者会发现上面的技巧都是假定知道数据库名的情况下才能实施的。但很多时候我们根本不可能知道数据库的名字,这时我们可能会感到很沮丧,觉得无法再进行下去,但数据库暴库技术的出现不仅可以一扫我们的沮丧情绪,也能让我们真正地将前面的技术综合起来利用。

很多人在用ASP写数据连接文件时,总会这么写(conn.asp):

……

db="data/rds_dbd32rfd213fg.mdb"

Set conn = Server.CreateObject("ADODB.Connection")

connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)

conn.Open connstr

function CloseDatabase

Conn.close

Set conn = Nothing

……

这段语句看上去觉得并没什么问题,而且数据库的名字取得很怪,如果没有数据库暴库技术我们能猜到这样的数据库名的几率几乎为零。但就是这么简短的语句却隐藏着无限的信息。可以说网上绝大部分的程序都存在这个漏洞。我们只要将地址栏上在数据连接文件conn.asp(一般为这个)前的/用%5c替代就可以暴到数据库的位置,接下来的事情应该不需要我说了吧?大家只要开动脑筋没有什么事情是做不成的。

分类: 杂志 标签:

C++实验

2006年3月21日 没有评论

C++实验三
点击下载
(1)/////////////////////////////////////////////
# include <iostream.h>
void main(){
    char ch;
    int nnum=0,nspace=0,nchar=0;
    cout<<"请输入一段文本:"<<endl;
    do{
        ch=cin.get();
        if(ch>=48 && ch<=57){
            nnum++;}
        else if(ch==32)        {
            nspace++;}
        else
        {nchar++;}
    }
    while (ch!=EOF);
    
    cout<<"数字个数"<<nnum<<endl;
    cout<<"空格个数"<<nspace<<endl;
    cout<<"其他字符个数"<<nchar-2<<endl;
}
(2)///////////////////////////////////////////
# include <iostream.h>
void main()
{
int day,month,year,sum,leap;
cout<<"please input year,month,day"<<endl;
cin>>year>>month>>day;

switch(month)/*先计算某月以前月份的总天数*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:cout<<"data error"<<endl;break;
}
sum=sum+day;

if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
    leap=1;
else
    leap=0;
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
cout<<"It is the "<<sum<<"th day."<<endl;
}
———————————————————————————-
C++实验四
点击下载
# include <iostream.h>

int a,b,min,max;
char inn;

void input();
void process();
void output();

void main()
{
input();

void input()
{
cout<<"请输入第一个数据:";
cin>>a;
cout<<"请输入第二个数据:";
cin>>b;
process();
output();
}

void process()
{
min=a<b?a:b;
max=a>b?a:b;
while(max%min!=0)
  {
  int temp=min;
    min=max%min;
    max=temp;
  }
}

void output()
{
cout<<"最大公约数:"<<min<<endl;
cout<<"继续<Y(yes)> OR <N(no)>?"<<endl;
cin>>inn;

while ( inn==89 || inn==121 || inn==78 || inn==110)
{
  if (inn==89 || inn==121)
    input();
  if (inn==78 || inn==110)
    break;
}  
  
}
////////////////////////////////////////////////////////////////
实验五(1)
#include<iostream.h>
double fun(double);
void main()
{
while(1){
int m=0,n=0; 
cout<<"请输入m的值:"<<endl;
cin>>m;
cout<<"请输入n的值:"<<endl;
cin>>n;
if(n>=m)
cout<<"结果为:"<<fun(n)/(fun(m)*fun(n-m))<<endl;
else
 cout<<"数据大小不合适!"<<endl;
cout<<"继续?<y/n>"<<endl;
char yn;
cin>>yn;
if (yn=='n')  break;
}
}
double fun(double x)
{
double y;
if (x==0||x==1) y=1;
    else
        y=x*fun(x-1);
return y;
}
//////////////////////////////////////////////////////////////////
实验六
//定义一个圆类(Circle),
//属性为半径和周长、面积,
//操作为输入半径并计算周长、面积,
//输出半径、周长和面积。
//要求定义构造函数和拷贝构造函数。
#include<iostream.h>
class Circle{
    private:
        float R;//半径
        const float PI;//pi
    public:
        void Circle::registCircle(float);
        float outr(void);
        float outc(void);
        float outs(void);
};
void Circle::registCircle(float r)
{
    R=r;
    PI=3.1415926;
}
float Circle::outr(void)
{
    return(R);
}

float Circle::outc(void)
{
    float c;
    c=2*PI*R;
    return(c);
}

float Circle::outs(void)
{
    float s;
    s=PI*R*R;
    return(s);
}

void main()
{
    Circle yuan;
    float rr;
    cout<<"请输入圆半径:"<<endl;
    yuan.registCircle(rr);
    cout<<"圆的半径为:"<<yuan.outr();
    cout<<"圆的周长为:"<<yuan.outc();
    cout<<"圆的面积为:"<<yuan.outs();
}

分类: 大学 标签:

STRASSEN算法 ^^^

2006年3月20日 没有评论

一、STRASSEN算法 
#include<iostream.h>
#include<math.h>
#include<memory.h>

//enum   error   {wrong,right,overflow};

void   mutrixMul(int   **a,int   **b,int   **c,int   n);
void   main(void)
{
int   n;

cout<<"please   intput   the   demi   of   matrix:"<<endl;
cin>>n;
int   *a=new   int[n*n];
int   *b=new   int[n*n];
int   *c=new   int[n*n];
//初始化
cout<<"Input   the   elements   of   the   first:"<<endl;
for(int   counter=0;counter<n*n;counter++)
{
cin>>a[counter];
}
//需要清空、!!!
cout<<"your   intput   is:"<<endl;
for(counter=0;counter<n*n;counter++)
{
if(counter%n<n/2)
cout<<endl;
cout<<a[counter]<<"   ";
}

cout<<endl<<"Input   the   elements   of   the   secong:"<<endl;
for(counter=0;counter<n*n;counter++)
{
cin>>b[counter];
}
cout<<"your   intput   is:"<<endl;
for(counter=0;counter<n*n;counter++)
{
if(counter%n<n/2)
cout<<endl;
cout<<b[counter]<<"   ";
}

mutrixMul(&a,&b,&c,n);

cout<<endl<<"the   answer   is:"<<endl;
for(counter=0;counter<n*n;counter++)
{
if(counter%n<n/2)
cout<<endl;
cout<<c[counter]<<"   ";
}
cout<<endl;
}
void   mutrixMul(int   **a,int   **b,int   **c,int   n)
{
if(n==1)
{
// **c=2;
(*c)[0]=(*a)[0]*(*a)[0];
}
else
{
int   *a1=new   int[n*n/4];
int   *a2=new   int[n*n/4];
int   *a3=new   int[n*n/4];
int   *a4=new   int[n*n/4];
//为a申请四部分动态空间。

int   *b1=new   int[n*n/4];
int   *b2=new   int[n*n/4];
int   *b3=new   int[n*n/4];
int   *b4=new   int[n*n/4];
//为b申请。

int   *c1=new   int[n*n/4];
int   *c2=new   int[n*n/4];
int   *c3=new   int[n*n/4];
int   *c4=new   int[n*n/4];
int   *c5=new   int[n*n/4];
int   *c6=new   int[n*n/4];
int   *c7=new   int[n*n/4];
int   *c8=new   int[n*n/4];

int   a1counter,a2counter,a3counter,a4counter;
a1counter=a2counter=a3counter=a4counter=0;
int   b1counter,b2counter,b3counter,b4counter;
b1counter=b2counter=b3counter=b4counter=0;
int   c1counter,c2counter,c3counter,c4counter;
c1counter=c2counter=c3counter=c4counter=0;
int   c5counter,c6counter,c7counter,c8counter;
c5counter=c6counter=c7counter=c8counter=0;

//把a细分到a1,a2,a3,a4四个矩阵;
for(int   i=0;i<n*n/2;i++)
{
if(i%n<n/2)
{
a1[a1counter]=(*a)[i];
a1counter++;
}
else
{
a2[a2counter]=(*a)[i];
a2counter++;
}
}
for(i=n*n/2;i<n*n;i++)
{
if(i%n<n/2)
{
a3[a3counter]=(*a)[i];
a3counter++;
}
else
{
a4[a4counter]=(*a)[i];
a4counter++;
}
}
//把b细分到b1,b2,b3,b4四个矩阵;
for(i=0;i<n*n/2;i++)
{
if(i%n<n/2)
{
b1[b1counter]=(*b)[i];
b1counter++;
}
else
{
b2[b2counter]=(*b)[i];
b2counter++;
}
}
for(i=n*n/2;i<n*n;i++)
{
if(i%n<n/2)
{
b3[b3counter]=(*b)[i];
b3counter++;
}
else
{
b4[b4counter]=(*b)[i];
b4counter++;
}
}
        mutrixMul(&a1,&b1,&c1,n/2);
        mutrixMul(&a2,&b3,&c2,n/2);

        mutrixMul(&a1,&b2,&c3,n/2);
        mutrixMul(&a2,&b4,&c4,n/2);

mutrixMul(&a3,&b1,&c5,n/2);
        mutrixMul(&a4,&b3,&c6,n/2);

        mutrixMul(&a3,&b2,&c7,n/2);
        mutrixMul(&a4,&b4,&c8,n/2);

//
for(i=0;i<n*n/2;i++)
{
if(i%n<n/2)
{
(*c)[i]=c1[c1counter]+c2[c2counter];
c1counter++;
c2counter++;

}
else
{
(*c)[i]=c3[c3counter]+c4[c4counter];
c3counter++;
c4counter++;
}
}
for(i=n*n/2;i<n*n;i++)
{
if(i%n<n/2)
{
(*c)[i]=c5[c5counter]+c6[c6counter];
c5counter++;
c6counter++;
}
else
{
(*c)[i]=c7[c7counter]+c8[c8counter];
c7counter++;
c8counter++;
}
}

delete   a1,a2,a3,a4,b1,b2,b3,b4;
delete   c1,c2,c3,c4,c5,c6,c7,c8;
}

/////////////////////////////////////

*此程序为用改进Strassen分治法来解决矩阵乘法*/
/*新增功能:能禁止对阶数为非2的N次方的矩阵进行运算*/
#include<stdio.h>
#define   M   100
struct   matrix
{
int   m[32][32];
};

int   Judgment(int   n) /*判断是否为2的N次方的函数*/
{
int   flag,temp=n;
while(temp!=1   &&   temp%2==0)
{
if(temp%2==0)   temp/=2;
else   flag=1;
}
if(temp==1)   flag=0;
return   flag;
}

void   Divide(matrix   &d,matrix   &d11,matrix   &d12,matrix   &d21,matrix   &d22,int   n)
/*将一个大矩阵拆分成四个小矩阵的函数*/
{
int   i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
d11.m[i][j]=d.m[i][j];
d12.m[i][j]=d.m[i][j+n];
d21.m[i][j]=d.m[i+n][j];
d22.m[i][j]=d.m[i+n][j+n];
}
}

matrix   Merge(matrix   a11,matrix   a12,matrix   a21,matrix   a22,int   n)
/*将四个小矩阵合并成一个大矩阵的函数*/
{
int   i,j;
matrix   a;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
a.m[i][j]=a11.m[i][j];
a.m[i][j+n]=a12.m[i][j];
a.m[i+n][j]=a21.m[i][j];
a.m[i+n][j+n]=a22.m[i][j];
}
return   a;
}

matrix   AdhocMatrixMultiply(matrix   x,matrix   y) /*阶数为2的矩阵乘法函数*/
{
int   m1,m2,m3,m4,m5,m6,m7;
matrix   z;

m1=(x.m[1][1]+x.m[1][2])*y.m[1][1];
m2=x.m[1][2]*(y.m[2][1]-y.m[1][1]);
m3=(x.m[2][1]+x.m[2][2])*y.m[2][2];
m4=x.m[2][1]*(y.m[1][2]-y.m[2][2]);

m5=(x.m[1][2]+x.m[2][1])*(y.m[1][1]+y.m[2][2]);
m6=(x.m[2][1]-x.m[1][1])*(y.m[1][1]+y.m[1][2]);
m7=(x.m[1][2]-x.m[2][2])*(y.m[2][2]+y.m[2][1]);
z.m[1][1]=m1+m2;
z.m[1][2]=m5-m1+m4-m6;
z.m[2][1]=m5-m3+m2-m7;
z.m[2][2]=m3+m4;

return   z;
}

matrix   MatrixPlus(matrix   f,matrix   g,int   n) /*矩阵加法函数*/
{
int   i,j;
matrix   h;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
h.m[i][j]=f.m[i][j]+g.m[i][j];
return   h;
}

matrix   MatrixMinus(matrix   f,matrix   g,int   n) /*矩阵减法函数*/
{
int   i,j;
matrix   h;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
h.m[i][j]=f.m[i][j]-g.m[i][j];
return   h;
}

matrix   MatrixMultiply(matrix   a,matrix   b,int   n) /*矩阵乘法函数*/
{
int   k;
matrix   a11,a12,a21,a22;
matrix   b11,b12,b21,b22;
matrix   c11,c12,c21,c22,c;
matrix   m1,m2,m3,m4,m5,m6,m7;
k=n;
if(k==2)
{
c=AdhocMatrixMultiply(a,b);
return   c;
}
else

k=n/2;
Divide(a,a11,a12,a21,a22,k); //拆分A、B、C矩阵
Divide(b,b11,b12,b21,b22,k);
Divide(c,c11,c12,c21,c22,k);

m1=MatrixMultiply(MatrixPlus(a11,a12,n/2),b11,k);
m2=MatrixMultiply(a12,MatrixMinus(b21,b11,k),k);
m3=MatrixMultiply(MatrixPlus(a21,a22,k),b22,k);
m4=MatrixMultiply(a21,MatrixMinus(b12,b22,k),k);
m5=MatrixMultiply(MatrixPlus(a12,a21,k),MatrixPlus(b11,b22,k),k);
m6=MatrixMultiply(MatrixMinus(a21,a11,k),MatrixPlus(b11,b12,k),k);
m7=MatrixMultiply(MatrixMinus(a12,a22,k),MatrixPlus(b22,b21,k),k);
c11=MatrixPlus(m1,m2,k);
c12=MatrixPlus(MatrixMinus(m5,m1,k),MatrixMinus(m4,m6,k),k);
c21=MatrixPlus(MatrixMinus(m5,m3,k),MatrixMinus(m2,m7,k),k);
c22=MatrixPlus(m3,m4,k);

c=Merge(c11,c12,c21,c22,k); //合并C矩阵
return   c;

}

void   main()
{
int   i,j,n;
matrix   A,B,C={0};
while(n!=0)
{
printf("请输入矩阵的阶数N:\n");
scanf("%d",&n);
if(n==0)   break;
else
if(Judgment(n)==0) //判断矩阵的阶是否为2的N次方
{
printf("请输入矩阵A:\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&A.m[i][j]);
printf("请输入矩阵B:\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&B.m[i][j]);
if(n==1)   C.m[1][1]=A.m[1][1]*B.m[1][1]; //矩阵阶数为1时的特殊处理 
else   C=MatrixMultiply(A,B,n);

printf("矩阵C为:\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
printf("%8d%c",C.m[i][j],j==n?'\n':'   ');
}
else   printf("矩阵的阶数不是2的N次方!\n\n\n");
}
}
/*此程序用递归分治法解决矩阵乘法问题。
    当N=2时,矩阵可直接计算出来。
    当N>2时,可以继续将矩阵分块,直到子矩阵的阶降为2。*/

分类: 杂志 标签: