当前位置:首页 » 编程软件 » 重新编译程序校验和

重新编译程序校验和

发布时间: 2024-10-31 11:35:51

① 今年软考的程序员考纲是什么

程序员考试大纲 一、考试说明 1.考试要求: (1)掌握数制及其转换、数据的机内表示、算术和逻辑运算,以及相关的应用数学基础知识; (2)理解计算机的组成以及各主要部件的性能指标; (3)掌握操作系统、程序设计语言的基础知识; (4)熟练掌握计算机常用软件的基本操作; (5)熟练掌握基本数据结构和常用算法; (6)熟练掌握C程序设计语言,以及C++、java、Visual Basic其中一种程序设计语言; (7)熟悉数据库、网络和多媒体的基础知识; (8)掌握软件工程的基础知识,了解软件过程基本知识、软件开发项目管理的常识; (9)了解常用信息技术标准、安全性,以及有关法律、法规的基本知识; (10)了解信息化、计算机应用的基础知识; (11)正确阅读和理解计算机领域的简单英文资料。 2.通过本考试的合格人员能根据软件开发项目管理和软件工程的要求,按照程序设计规格说明书编制并调试程序,写出程序的相应文档,产生符合标准规范的、实现设计要求的、能正确可靠运行的程序,具有助理工程师(或技术员)的实际工作能力和业务水平。 3.本考试设置的科目包括: (1)计算机硬软件基础知识,考试时间为150分钟,笔试; (2)程序设计,考试时间为150分钟,笔试。 二、考试范围 考试科目1:计算机硬软件基础知识 1. 计算机科学基础 1.1 数制及其转换 二进制、十进制和十六进制等常用数制及其相互转换 1.2 数据的表示 数的表示(原码、反码、补码表示,整数和实数的机内表示方法,精度和溢出) 非数值表示(字符和汉字的机内表示、声音和图像的机内表示) 校验方法和校验码(奇偶校验码、海明校验码) 1.3 算术运算和逻辑运算 计算机中二进制数的运算方法 逻辑代数的基本运算和逻辑表达式的化简 1.4 数学应用 常用数值计算(矩阵、方程的近似求解、插值) 排列组合、应用统计(数据的统计分析) 1.5 常用数据结构 数组(表态数组、动态数组)、线性表、链表(单向链表、双向链表、循环链表)、队列、栈、树(二叉树、查找树)、图的定义、存储和操作 1.6 常用算法 常用的排序算法、查找算法、数值计算、字符串处理、数据压缩算法、递归算法、图的相关算法 算法与数据结构的关系,算法效率,算法设计,算法描述(流程图、伪代码、决策表) 2. 计算机系统基础知识 2.1 硬件基础知识 2.1.1 计算机系统的组成,硬件系统、软件系统及层次结构 2.1.2 计算机类型和特点 微机、工作站、服务器、大型计算机、巨型计算机 2.1.3 中央处理器CPU 运算器和控制器的组成,常用的寄存器、指令系统、寻址方式、指令执行控制、处理机性能 2.1.4 主存和辅存 存储器系统 存储介质(半导体、硬盘、光盘、闪存、软盘、磁带等) 主存储器的组成、性能及基本原理 Cache的概念、虚拟存储的概念 辅存设备的类型、特性、性能和容量计算 2.1.5 I/O接口、I/O设备和通信设备 I/O接口(总线、DMA、通道、SCSI、并行口、RS232C、USB、IEEE1394) I/O设备的类型和特性(键盘、鼠标、显示器、打印机、扫描仪、摄像头,以及各种辅存设备) I/O设备控制方式(中断控制、DMA) 通信设备的类型和特性(Modem、集线器、交换机、中继器、路由器、网桥、网关)及其连接方法和连接介质(串行连接、并行连接,传输介质的类型和特性) 2.2 软件基础知识 2.2.1 操作系统基础知识 操作系统的类型和功能 操作系统的内核(中断控制)和进程概念 处理机管理、存储管理、设备管理、文件管理、作业管理 汉字处理 图形用户界面及其操作方法 2.2.2 程序设计语言和语言处理程序基础知识 汇编、编译、解释系统的基础知识 程序设计语言的基本成分(数据、运算、控制和传输) 过程(函数)调用 2.3 网络基础知识 网络的功能、分类、组成和拓扑结构 网络体系结构与协议(OSI/RM,TCP/IP) 常用网络设备与网络通信设备,网络操作系统基础知识和使用 Client/Server结构、Browser/Server结构 LAN基础知识 Internet基础知识 2.4 数据库基础知识 数据库管理系统的主要功能和特征 数据库模型(概念模式、外模式、内模式) 数据模型,ER图 数据操作(关系运算) 数据库语言(SQL) 数据库的主要控制功能 2.5 多媒体基础知识 多媒体基础概念,常用多媒体设备性能特征,常用多媒体文件格式类型 简单图形的绘制,图像文件的基本处理方法 音频和视频信息的应用 简单多媒体应用制作方法 2.6 系统性能指标 响应时间、吞吐量、周转时间等概念 可靠性、可维护性、可扩充性、可移植性、可用性、可重用性、安全性等概念 2.7 计算机应用基础知识和常用办公软件的操作方法 信息管理、数据处理、辅助设计、自动控制、科学计算、人工智能等概念 文字处理基础知识和常用操作方法 电子表格处理基础知识和常用操作方法 演示文稿制作方法 电子邮件处理操作方法 网页制作方法 3. 软件开发和运行维护基础知识 3.1 软件工程和项目管理基础知识 软件工程基本概念 软件开发各阶段的目标和任务 软件过程基本知识 软件工程项目管理基本知识 面向对象开发方法基础知识 软件开发工具与环境基础知识(CASE) 软件质量管理基础知识 3.2 软件需求分析、需求定义及软件基础知识 结构化分析概念(数据流图(DFD)、实体关系图(ER)) 面向对象设计、结构化设计基础知识 模拟设计、代码设计、人机界面设计要点 3.3 程序设计基础知识 结构设计程序设计,程序流程图,NS图,PAD图 程序设计风格 面向对象设计基础知识、可视化程序设计基础知识 3.4 程序测试基础知识 黑盒测试、白盒测试、灰盒测试基础知识 测试工作流程 3.5 软件开发文档基础知识 3.6 软件运行和维护基础知识 软件运行基础知识 软件维护基础知识 4. 安全性基础知识 安全性基本概念 计算机病毒的防治,计算机犯罪的防范 访问控制 加密与解密基础知识 5. 标准化基础知识 标准化基本概念 国际标准、国家标准、行业标准、企业标准基础知识 代码标准、文件格式标准、安全标准、软件开发规范和文档标准基础知识 标准化机构 6. 信息化基本知识 信息化基本概念 全球信息化趋势,国家信息化战略,企业信息化战略和策略常识 有关的法律、法规要点 过程教育、电子商务、电子政务等常识 企业信息资源管理常识 7. 计算机专业英语 掌握计算机技术的基本词汇 能正确阅读和理解本领域的简单英文资料 考试科目2:程序设计 1. 内部设计 1.1 理解外部设计 1.2 功能划分和确定结构 数据流图、结构图 1.3 物理数据设计 确定数据组织方式、存储介质,设计记录格式和处理方式 1.4 详细输入输出设计 界面设计、报表设计 1.5 内部设计文档 对程序接口、程序功能、人机界面、输入输出、测试计划的描述 1.6 内部设计文档 2. 程序设计 2.1 模拟划分(原则、方法、标准) 2.2 编写程序设计文档 模块规格说明书(程序处理逻辑的描述、输入输出数据格式的描述) 测试要求说明书(测试类型和目标、测试用例、测试方法) 2.3 程序设计评审 3. 程序实现 3.1 编程 编程方法和标准 程序设计语言的使用 人工检查 程序文档化 3.2 程序测试 准备测试环境和测试工具 准备测试数据 写出测试报告 4.程序设计语言(C语言为必选,其他语言可以任选一种) 4.1 C程序设计语言(ANSI C标准) 程序结构,语法,数据类型说明,可执行语句,函数调用,标准库函数,指针 4.2 C++程序设计语言(ANSI C++标准) C++和面向对象程序设计,语法和程序结构,类、成员、构造函数、析构函数、模板、继承、多态 4.3 Java程序设计(Java 2) Java和面向对象程序设计 语言机制(程序结构和语法,类、成员、构造函数、析构函数、继承、接口) 4.4 Visual Basic程序设计(Visual Basic 6.0) 用户界面设计 程序结构和语法 文件系统对象 访问数据库

② 简述JAVA程序的编辑编译和运行过程

Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将 Java源程序翻译为JVM可执行代码--字节码。Java将符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查 表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。

运行JVM字节码的工作是由解释器( java命令 )来完成的。解释执行过程分三部进行:代码的装入、代码的校验和代码的执行。装入代码的工作由"类装载器"(class loader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放 在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其他类。在本台计算机上的所有类都在同一地址空间内,而所有从外 部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入 了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用同特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的 内存布局,Java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。

③ checksum这个校验的文件咋用

校验和(Checksum)

PE的可选映像头(IMAGE_OPTION_HEADER)里面,有一个Checksum字段,是该文件的校验和,一般EXE文件可以使0,但一些重要的和系统DLL及驱动文件必须有一个校验和.

Windows 提供了一个API函数MapFileAndCheckSum 测试文件的Checksum,它位于IMAGEHLP.DLL链接库里,其原型:

ULONG MapFileAndCheckSum

{

LPSTR FileName, // 文件名

LPDWORD HeaderSum, // 指向PE文件头的CheckSum

LPDWORD new_checksum // 指向新计算出的Checksum

}

程序一旦运行后,new_checksum 地址处将放当前的文件的校验和,old_checksum地址指向PE文件的checksum字段

安全的方法是将此值放在注册表里,需要时比较.

内存映像校验

磁盘文件完整性校验可以抵抗解密者直接修改文件,但对内存补丁却没有效果,必须对内存关键的代码进行校验.

1 对整个代码进行校验

每个程序至少有一个代码区块和数据区块,数据区块属性可读写,程序运行时全局变量通常会放在这里,这些数据会动态变化,因此校验这部分是没什么意义,而代码段只读,存放的是程序代码,在程序中数据数不会变的,因此用这部分进行内存校验是可行的.

具体实现方法:

(1) 从内存中映像中得到PE相关数据,如代码块的RVA和内存大小

(2) 根据得到代码区块的RVA值和内存大小,计算出内存数据的CRC-32值

(3) 读取自身文件先前存储的CRC-32值(PE文件头前一个字段),这个值是通过软件写进去的.

(4) 比较两个CRC-32值.

这样比较内存的代码段校验,只要内存的数据被修改,就能发现。

BOOL CodeSectionCRC32()

{

PIMAGE_DOS_HEADER pDosHeader = NULL;

PIMAGE_NT_HEADERS pNTHeader = NULL;

PIMAGE_SECTION_HEADER pSection = NULL;

DWORD ImageBase,OriginalCRC32;

ImageBase = (DWORD)GetMoleHandle(NULL); // 取基址

pDosHeader = (PIMAGE_DOS_HEADER)ImageBase;

pNtHeader = (PIMAGE_NT_HEADER32)((DWORD)pDosHeader + pDosHeader -> e_lfanew);

// 定位到PE文件头前4个字节值,并读取存储在这里的CRC -32值

OriginalCRC32 = *((DWORD*)(DWORD)pNtHeader - 4);

pSecHeader = IMAGE_FIRST_SECTION(pNtHeader); // 得到第一个区块的地址

//假设第一个区块就是代码区块

if(OriginalCRC32 == CRC32((BYTE*)ImageBase + pSecHeader -> VirtualAddress)

// 为了方便加壳

// 上一句也可为if(OriginalCRC32 == CRC32((BYTE *)0x401000, 0x36AE)

return TRUE;

else

return FALSE;

}

热点内容
struts1ajax上传 发布:2024-10-31 13:18:58 浏览:637
coreldraw字体文件夹 发布:2024-10-31 13:17:08 浏览:271
oraclesql的用法 发布:2024-10-31 13:06:55 浏览:718
安卓图标怎么扩大 发布:2024-10-31 13:04:49 浏览:905
苹果机和安卓机哪个像素好 发布:2024-10-31 13:02:32 浏览:774
华为服务器ibmc设置ip 发布:2024-10-31 13:01:38 浏览:54
姓名测算法 发布:2024-10-31 12:56:39 浏览:542
如何设置录像机存储时间长短 发布:2024-10-31 12:55:44 浏览:119
除湿机的压缩机 发布:2024-10-31 12:54:44 浏览:501
javauriuri 发布:2024-10-31 12:51:56 浏览:903