• 20145203 《信息安全系统设计基础》第2周学习总结


    20145203 《信息安全系统设计基础》第2周学习总结

    教材学习内容总结

    1 GCC编译的四个步骤:预处理(gcc -E)、编译(gcc -S)、汇编(gcc -c)、链接, gcc 选项可以简记为“ESc”,相应的产出文件的后缀可以简记为“iso”

    2 静态链接库的生成:ar rcsv libxxx.a xxx.o

    静态库的使用: gcc -o main main.c -L. -lxxx

    注意-L -l 的含义(未解决)

    3 共享库的生成 gcc -fPIC -c xxx.c gcc -shared -o libxxx.so xxx.o

    共享库的使用:gcc -o main main.c -L. -lxxx

    注意注册共享库的方法(未解决)

    4 gdb: gcc -g 四种断点(函数、行、条件、临时)

    5 makefile:只编译改动过的文件。

    会画依赖图(未解决)

    会根据依赖图写显示规则(未解决)

    6、链接器的两个任务

    ①符号解析,目的:将每个符号引用刚好和一个符号定义联系起来。

    ②重定位

    7、目标文件的三种形式

    ①可重定目标文件

    ②可执行目标文件

    ③共享目标文件

    目标文件格式(a.out COFF PE ELF) :PE,ELF格式是研究病毒等恶意代码的基础。

    8、 处理目标文件的工具

    AR:创建静态库,插入,删除,列出,和提取成员

    STRINGS:列出一个目标文件中所有可以打印的字符串

    STRIP:从目标文件中删除符号表信息

    NM:列出一个目标文件的符号表中定义的符号

    SIZE:列出目标文件中节的名字和大小

    READELF:显示一个目标文件的完整结构,包括ELF头中编码的所有信息,包括SIZE和NM的功能。

    OBJDUMP:所有二进制工具之母,能够显示一个目标文件的完整信息。它的最大作用是反汇编.text节的二进制指令

    LDD:列出一个可执行文件在运行时所需要的共享库。

    9、常用工具:①连接工具ld② 汇编工具as ③目标复制工具objcopy ④地址转换工具add2line⑤变量列举工具nm⑥创建档案工具ar⑦显示elf文件信息工具readelf⑧目标文件大小工具size⑨反汇编工具objdump⑩打印目标代码工具strings

    10、vim总结

    11、vim 编程小技巧
    ①大写“K”可以用来查找函数的帮助信息:查看 man page,命令模式下,将光标放在函数名上,按"K"可以直接察看 man page。

    ②几个设置

    :set nu 显示行号

    :set ai 自动缩行

    :set ts=4 设置一个 TAB 键等于几个空格

    ③移动光标

    [[ 转到上一个位于第一列的"{"

    ]] 转到下一个位于第一列的"{"

    { 转到上一个空行

    } 转到下一个空行

    ④gd 转到当前光标所指的局部变量的定义

    ⑤我们可以把编译过程分成四步,以编译hello.c生成可执行文件hello为例,如下:

    预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp

    编 译: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

    ⑥GDB:注意使用GCC编译时要加“-g”参数。 参考gdb参考卡GDB最基本的命令有:

    gdb programm(启动GDB)

    b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)

    run 开始运行程序

    bt 打印函数调用堆栈

    p 查看变量值

    c 从当前断点继续运行到下一个断点

    n 单步运行

    s 单步运行

    quit 退出GDB

    ⑦应该掌握GDB的调试命令有:

    display 跟踪变量值的改变

    until 跳出循环

    finish 跳出函数

    help 帮助

    12、练习作业
    ①成功建立文档并敲好代码

    ②编译成功!

    ③建立名为math1.a静态库

    ④链接main.o和静态库math.a

    ⑤运行结果:

    ⑥建立名为math2.so动态库并运行

    教材学习中的问题和解决过程

    xxx
    xxx

    代码调试中的问题和解决过程

    1、问题:

    解决方法:再输入时,敲键盘‘a’

    2、问题:编译错误

    解决方法:发现其他人也有类似错误,没有头文件,加上头文件之后编译成功

    本周代码托管截图

    其他(感悟、思考等,可选)

    老师给了很多东西,但是不知道先看哪个,是按照顺序看么?内容太多无法一时消化感觉闭卷考试还是很难。每次写博客都是先看一些理论知识,但是到最后时间越少,实践起来就特别紧张,但是实践才是最容易提升和发现问题的地方,希望自己下次注意。看理论知识时无法很好地与实践相结合导致实践时还是很陌生无从下手浪费了很多时间。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 150/150 1/2 20/20
    第二周 200/350 1/2 24/44

    参考资料

  • 相关阅读:
    POJ 2752 Seek the Name, Seek the Fame
    POJ 2406 Power Strings
    KMP 算法总结
    SGU 275 To xor or not to xor
    hihocoder 1196 高斯消元.二
    hihoCoder 1195 高斯消元.一
    UvaLive 5026 Building Roads
    HDU 2196 computer
    Notions of Flow Networks and Flows
    C/C++代码中的笔误
  • 原文地址:https://www.cnblogs.com/GZSdeboke/p/5907314.html
Copyright © 2020-2023  润新知