网络公司做的网站我能改后台么,2015wordpress漏洞,免费工程信息网,合肥企业做网站20145231 《信息安全系统设计基础》期中总结 教材学习内容复习 结合课本知识及再次实践加深理解记忆 按照学习时相关重点知识的顺序进行整理归纳 实践内容#xff1a;重要命令的使用 gdb调试栈帧#xff08;再理解#xff09; makefile 编译运行代码深入理解局部性 Linux中的… 20145231 《信息安全系统设计基础》期中总结 教材学习内容复习 结合课本知识及再次实践加深理解记忆 按照学习时相关重点知识的顺序进行整理归纳 实践内容重要命令的使用 gdb调试栈帧再理解 makefile 编译运行代码深入理解局部性 Linux中的重要常用命令 Linux中命令格式为command [options] [arguments] []表示是可选的即组成结构为命令 [选项] [参数]
**man命令**man命令是Linux下的帮助指令通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。常用选项-a在所有的man帮助手册中搜索-k根据关键字搜索联机帮助是一种模糊搜索-f关键字精确搜索等价于whatis指令显示给定关键字的简短描述信息-P指定内容时使用分页程序-M指定man手册搜索的路径参数数字指定从哪本man手册中搜索帮助关键字指定要搜索帮助的关键字man -k常用来搜索结合管道使用。例句如下man -k k1 | grep k2 | grep 2**cheat命令**在linux上man命令几乎是万能的但它却不是最高效的。由于它给出的帮助信息很长在短时间内不好理解所以在这种情况下用cheat命令更方便cheat命令简单来说就是告诉你一个命令如何使用。它没有提供其他额外多余的信息只通过使用实例告诉你一个命令如何使用。**grep命令**grep命令是一种强大的文本搜索工具它能使用正则表达式搜索文本并把匹配的行打印出来。grep全称是Global Regular Expression Print表示全局正则表达式版本它的使用权限是所有用户。命令格式grep [options][options]主要参数c只输出匹配行的计数I不区分大小写(只适用于单字符)h查询多文件时不显示文件名l查询多文件时只输出包含匹配字符的文件名n显示匹配行及行号s不显示不存在或无匹配文本的错误信息v显示不包含匹配文本的所有行如果想查找某个宏我们已知宏保存在include文件夹中所以可以使用下列语句grep -nr XXX /usr/includeXXX为所要找的宏
**find命令**find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时不设置任何参数则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。命令格式find pathname -options [-print -exec -ok ...]参数pathnamefind命令所查找的目录路径。例如用.来表示当前目录用/来表示系统根目录printfind命令将匹配的文件输出到标准输出execfind命令对匹配的文件执行该参数所给出的shell命令相应命令的形式为command { } \;注意{ }和\之间的空格ok和-exec的作用相同只不过以一种更为安全的模式来执行该参数所给出的shell命令在执行每一个命令之前都会给出提示让用户来确定是否执行常用选项-name按照文件名查找文件-perm按照文件权限来查找文件mtime -n n按照文件的更改时间来查找文件 - n表示文件更改时间距现在n天以内 n表示文件更改时间距现在n天以前-newer file1 ! file2查找更改时间比文件file1新但比文件file2旧的文件-type查找某一类型的文件诸如b - 块设备文件d - 目录c - 字符设备文件p - 管道文件l - 符号链接文件f - 普通文件-size n[c] 查找文件长度为n块的文件带有c时表示文件长度以字节计-depth在查找文件时首先查找当前目录中的文件然后再在其子目录中查找。 举例查找当前目录下大小大于10K的文件
**locate命令**locate命令其实是find -name的另一种写法但是要比后者快得多原因在于它不搜索具体目录而是搜索一个数据库/var/lib/locatedb这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库并且每天自动更新一次所以使用locate命令查不到最新变动过的文件。为了避免这种情况可以在使用locate之前先使用updatedb命令手动更新数据库。命令格式locate [选择参数] [样式]命令参数-e将排除在寻找的范围之外-1如果是1则启动安全模式在安全模式下使用者不会看到权限无法看到的档案。这会使速度减慢因为 locate必须至实际的档案系统中取得档案的权限资料-f将特定的档案系统排除在外例如我们没有到必要把proc档案系统中的档案放在资料库中-q安静模式不会显示任何错误讯息-n至多显示 n个输出-r使用正规运算式 做寻找的条件-o指定资料库存的名称-d指定资料库的路径-h显示辅助讯息-V显示程式的版本讯息**whereis命令**whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码二进制文件或是帮助文件。whereis程序还具有搜索源代码、指定备用搜索路径和搜索不寻常项的能力。whereis命令只能用于程序名的搜索而且只搜索二进制文件参数-b、man说明文件参数-m和源代码文件参数-s。如果省略参数则返回所有信息。命令格式whereis [-bmsu] [BMS 目录名 -f ] 文件名主要参数-b定位可执行文件-m定位帮助文件-s定位源代码文件-u搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件-B指定搜索可执行文件的路径-M指定搜索帮助文件的路径-S指定搜索源代码文件的路径**which命令**which指令会在PATH变量指定的路径中搜索某个系统命令的位置并且返回第一个搜索结果。which是根据使用者所配置的PATH变量内的目录去搜寻可运行档的,所以不同的PATH配置内容所找到的命令是不一样的。命令格式which 可执行文件名称命令参数-n指定文件名长度指定的长度必须大于或等于所有文件中最长的文件名-p与-n参数相同但此处的包括了文件的路径-w指定输出时栏位的宽度-V显示版本信息总结find、locate、which、whereis的区别 which (寻找执行档) 这个指令是根据PATH这个环境变量所规范的路径去搜寻执行档的档名所以重点是找出执行档而已which 后面接的是完整档名 whereis (寻找特定档案)搜寻linux数据库档案中所记录的东西和locate的主要区别在于后面的参数 locate搜寻linux数据库档案中所记录的东西后面直接跟档案的部分名称就行 find直接搜索整个硬盘
**sort命令**将文本文件内容加以排序。可针对文本文件的内容以行为单位来排序。参数m将几个排序好的文件进行合并。n依照数值的大小排序Linux Bash中ls . | sort 命令的功能是显示当前目录内容并排序**du命令**显示目录或文件的大小。du会显示指定的目录或文件所占用的磁盘空间。参数a显示目录中个别文件的大小。b显示目录或文件大小时以byte为单位。c 除了显示个别目录或文件的大小外同时也显示所有目录或文件的总和**ls命令**显示指定工作目录下之内容列出目前工作目录所含之档案及子目录)。参数a显示所有档案及目录A同 -a 但不列出 . (目前目录) 及 .. (父目录)t将档案依建立时间之先后次序列出列出目前工作目录下所有档案及目录目录于名称后加 /, 可执行档于名称后加 * : ls -AF
Linux Bash中把ls命令显示当前目录的结果存入ls.txt的命令输出重定向命令是ls ls.txtvim gcc gdb make 的学习 详细内容见博客(http://www.cnblogs.com/xzh20145231/p/5907518.html) Vim常用命令总结
插入i在当前光标处进行编辑a在光标后插入编辑退出q!强制退出不保存:q退出:wq!强制保存并退出:wq保存并退出:w 文件路径另存为删除x删除游标所在的字符dd删除整行行间跳转nG(n Shiftg)光标移动到第n行复制与粘贴nyy复制光标所在及其后的整行共n行p代表粘贴至光标后功能设定
:set autoindent(ai)设置自动缩进:set cindent(cin)设置C语言风格缩进:set nu以显示行号GCC编译过程
预处理gcc –E hello.c –o hello.i ;gcc –E调用cpp 产生预处理过的C原始程序编译gcc –S hello.i –o hello.s ;gcc –S调用ccl 产生汇编语言原始程序汇编gcc –c hello.s –o hello.o ;gcc -c 调用as 产生目标文件链 接gcc hello.o –o hello ;gcc -o 调用ld 产生可执行文件运行 ./helloGDB调试
进入gdbgcc -g xxx.c -o xxxgdb xxx查看源码(gdb) l进行行号提示(gdb) b n在第n行设置断点(gdb) r运行代码运行至断点处(gdb) n单步运行(gdb) c使程序继续往下运行直到再次遇到断点或程序结束(gdb) q退出GDB(gdb) watch n在n设置了观察点观察变量的变化情况四种断点函数断点b 函数名 条件表达式行断点b 行数或函数名 条件表达式条件断点b 行数或函数名 if表达式临时断点tbreak 行数或函数名 条件表达式参照 http://www.cnblogs.com/lxm20145215----/p/5982554.html 中具体gdb调试指令对栈帧进行再理解 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编然后使用gdb example指令进入gdb调试器 进入之后先在main函数处设置一个断点再run一下使用disassemble指令获取汇编代码用i(info) r(registers)指令查看各寄存器的值 可见此时主函数的栈基址为0xffffd068用x(examine)指令查看内存地址中的值但目前%esp所指堆栈内容为0%ebp所指内容也为0 结合display命令和寄存器或pc内部变量做如下设置display /i $pc在每次执行下一条汇编语句时都会显示出当前执行的语句。再分别查看每一步%esp%ebp中值的变化情况 call指令将下一条指令的地址入栈此时%esp,%ebp和堆栈的值为 将上一个函数的基址入栈从当前%esp开始作为新基址 先为传参做准备 实参的计算在%eax中进行 f函数的汇编代码 实参入栈 call指令将下一条指令地址入栈 计算过程 弾栈栈顶到%ebppop %ebp%esp增加4字节 ret指令将栈顶弹给%eip 因为函数f修改了%esp所以用leave指令恢复。leave指令先将%esp对其到%ebp然后把栈顶弹给%ebpLEAVE指令就相当于 mov esp,ebp 和 pop ebp 两条指令的执行效果。 主函数的汇编代码 makefile 功能识别文件代码是否更新减少编译工作量格式为目标体依赖文件[tab键]各目标体运行命令目标体由make创建通常是目标文件或可执行文件依赖文件创建目标体所依赖的文件运行命令创建每个目标体时需要的运行命令必须以tab键开头。使用make的格式make 目标体计算机系统简介 了解计算机的基本构造及各个部分之间的联系是对后面章节的一个概括硬件组成等 了解编译器如何编译 了解了操作系统提供的抽象表示文件是对I/O设备的抽象表示进程是对处理器、主存和I/O设备的抽象表示。 链接 静态库 静态库是一系列的目标文件.o文件的归档文件libname.a文 件)链接阶段选择静态库后缀名为“.a”选择动态库后缀名为“.so”。 静态链接库的生成gcc -c 文件名.c ar rcsv libxxx.a xxx.o 静态库的使用gcc -o 文件名 文件名.c -L. -lxxx//链接到静态库 注意 -L在库文件的搜索路径列表中添加dir目录 -l在头文件的搜索路径列表中添加dir目录 共享库 共享库的生成 gcc -fPIC -c xxx.c gcc -shared -o libxxx.so xxx.o 共享库的使用gcc -o main main.c -L. -lxxx 注册共享库的方法将库文件直接复制到/lib或者/usr/lib目录下cp (libname).so /lib 信息的表示和处理 详细内容见博客 (http://www.cnblogs.com/xzh20145231/p/5928371.html) 各种进制之间的转换以及十六进制加减法 布尔运算求值 位级运算的掩码运算 逻辑运算和位级运算的区别 无符号数编码 补码编码 有符号数和无符号数之间的转换 截断数字的方法 补码的加法补码求非 无符号乘法和有符号乘法 除以二的幂无符号逻辑移位补码数算术移位 浮点数IEEE浮点标准 二进制小数 规格化的值非规格化的值。 程序的机器级表示 用汇编语言理解指令理解栈帧 详细内容见博客:(http://www.cnblogs.com/xzh20145231/p/5967918.html#3534564) 了解机器级编程学习了IA32指令集了解指令集体系结构和虚拟地址这两种抽象在机器级编程中的重要性 利用object dump进行反汇编以查看汇编指令 基本数据格式 操作数指示符操作数类型立即数、寄存器、存储器相关寻址方式对应的格式 根据操作数写出对应值 数据传送指令与Windows系统下指令有所区别重点理解压栈和弾栈操作 加载有效地址指令leal 控制条件码的设置、访问方式跳转指令及其编码循环结构机器级代码理解goto代码条件传送指令switch语句 过程栈帧结构转移控制call指令和ret指令寄存器使用习惯使用gdb调试帮助理解栈帧的建立和消亡。 处理器体系结构 详细内容见博客;(http://www.cnblogs.com/xzh20145231/p/5991005.html#3542104) 以Y86为例指令加硬件实现HCL语言 Y86指令及指令编码通过指令能写出编码通过编码能写出指令 Y86异常值代表的含义 体会Y86与IA32代码的区别 执行popl和pushl指令时处理器行为的不确定性 组合电路和布尔表达式HCL语言表示 ALU算术逻辑单元 随机访问存储器的读写操作 Y86的顺序实现取指、译码、执行、访存、写回、更新PC会写每个阶段对应的指令 SEQ硬件结构、SEQ的时序对应每个阶段。 存储器层次结构 详细内容见博客;(http://www.cnblogs.com/xzh20145231/p/6013913.html#3545642) 常见存储技术RAM、ROM、磁盘、固态硬盘区别及应用 对比SRAM和DRAM的区别及应用 非易失性存储器和只读存储器 访问主存的方法读写事务 磁盘磁盘构造磁盘容量计算磁盘操作寻道时间、旋转时间、传送时间逻辑磁盘块映射关系、三元组访问磁盘连接到I/O设备 局部性时间局部性、空间局部性:判断程序好坏 利用循环体提升程序局部性 局部性分析 参考了这篇文章http://www.cnblogs.com/dxy1982/p/4194218.html觉得分析的很好。 存储器层次结构高速缓存、缓存不命中。 对课程的意见或建议 谢谢老师特意发表git配置教程还有vim使用教程等指导博客让像我这样动手自学能力不强的同学跟上进度 代码托管截图 使用find *.|xargs wc -l查找当前目录以及子目录中的文件行数 托管链接 收获 时间过得很快周而复始一个学期却早已过半。在本门课的学习中我自知不够优秀对于计算机系统的相关知识很多可能都还是一知半解实践能力也不算强每次破解安装或使用新的软件都落于人后但是我觉得我学习这门课最大的收获就是实践才有收获。很多时候我们不愿尝试新事物都是因为畏难情绪但是只要你下定决心认真去做也一样能做好空有理论而不实践等于零。 比如之前忽视了Linux命令学习的重要性在使用终端时感觉不便通过本周对Linux命令的再实践在以后使用虚拟机终端的过程中相信会受益匪浅再比如通过上几周使用git托管代码我发现资料备份以及分类的重要性。还有看书时不做练习就无法真正理解新知识的核心以及涵义... 学习一门课不只是掌握其中的相关知识能够学到一种学习方式、学习习惯才是最大的收获如老师所说的元知识某些通用于各种学科的知识现在也开始慢慢理解为什么说至少要学习两种编程语言、学习两种操作系统才能找到所谓的不变量...学习之路道阻且长且学且珍惜。 不足 在前期的学习中忽略了对基本命令的实践与掌握所以此次总结特意加强了这部分的实践及记忆在使用虚拟机终端时总是不知道对应操作的命令每次都要去查找所以对于重要命令的使用一定要熟记于心在课本学习时有时会忽略实践的重要性导致课本知识不能很好的被消化理解比如存储其结构体系中的程序的局部性必须要通过敲代码运行才能直观对比出差距...庆幸自己及时端正了态度开始每周真正按照老师的要求去做夯实了所学知识继续努力。 学习进度条 博客量新增/累积学习时间新增/累积重要成长目标30篇400小时第一周2/220/20学习了Linux核心命令第二周2/421/41学习了vim、gcc、gdb指令第三周2/620/61学习了信息的表示和处理了解了二进制在计算机系统中的重要性第五周2/820/81学习了机器级程序读懂汇编代码第七周2/1218/118了解了存储器层次结构及存储技术第八周2/1415/133对前几周内容进行复习转载于:https://www.cnblogs.com/xzh20145231/p/6035460.html