首页 > 其他分享 >学习笔记1

学习笔记1

时间:2023-09-10 18:12:18浏览次数:34  
标签:文件 gcc GDB 笔记 学习 Unix Linux out

学习笔记1

第一章

  • 本书目标
    • 强化编程背景知识
    • 动态数据结构的应用
    • 进程概念和进程管理
    • 并发编程
    • 定时器和定时功能
    • 信号、信号处理和进程间的通信
    • 文件系统
    • TCP/IP和网络编程
  • 关于Unix
    • AT&T Unix
    • Berkeley Unix
    • HP Unix
    • IBM Unix
    • Sun Unix
  • 关于Linux
    • Debain Linux
    • Ubuntu Linux
    • Linux Mint
    • 基于RPM的Linux
    • Slackware Linux
  • 虚拟机上的Linux
    • VirtualBox
    • VMware
      • 我使用的虚拟机
    • 双启动Slackware和Ubuntu Linux
  • Unix/Linux文件系统组织
    • 文件类型
      • 目录文件
      • 非目录文件
        • 常规文件(REGULAR)
        • 特殊文件(SPECIAL)
          • 字符特殊文件:字符I/O,如/dev/tty0等。
          • 块特殊文件:块I/O,如/dev/had等。
          • 其他类型,如网络(套接字)特殊文件等。
      • 符号链接文件:属于常规文件,其内容为其他文件的路径名。例如:
        ln -s aVeryLongFileName myLink
    • Unix/Linux文件树
      • bin (普通用户命令)
      • boot (内核镜像)
      • dev (设备文件)
      • etc (系统维护文件)
      • home (用户主目录)
      • lib (链接库)
      • proc (系统信息相关的文件)
      • sbin (超级用户命令)
      • tmp
        • bin (命令)
        • include (头文件)
        • lib (库文件)
      • usr
        • local
        • man (用户手册)
        • X11 (X-Window)
    • 文件路径名
      • Unix/Linux文件树的根节点(符号‘/’)为根目录。
      • 以'/'为开头的路径名为绝对路径名,反之则为相对于进程当前工作目录
    • Unix/Linux命令
        ls:列出CWD的绝对路径名
        cd dirname:更改目录
        pwd:打开CWD的绝对路径名
        touch filename:更改文件名和时间戳
        cat filename:显示文件内容
        cp src dest:复制地址
        mv src dest:移动或重命名文件
        mkdir dirname:创建目录
        rmdir dirname:移除目录
        rm filename:移除或删除文件
        ln oldfile newfile:在文件之间创造链接
        find:搜索文件
        grep:搜索文件中包含模式的行
        ssh:登录到远程主机
        gzip filename:将文件压缩成.gz文件
        gunzip file.gz:解压.gz文件
        tar -zcvf file.tgz:从当前目录创建压缩tar文件
        tar -zxvf file.tgz:从.tgz文件中解压文件
        man:显示在线手册页
        zip file.zip filenames:将文件压缩成.zip文件
        - unzip file.zip:解压.zip文件
  • Ubuntu Linux系统管理
    • 用户账户
    • 添加新用户
    • sudo命令

第二章

  • Linux中的文本编辑器

    • vim
      • 命令模式:用于输入命令
        • vim启动时的默认模式
        • i:切换到插入模式,插入文本
        • a:切换到插入模式,追加文本
        • ':':进入末行模式
      • 插入模式:用于输入和编辑文本
      • 末行模式:用于保存文本和退出
    • gedit
    • emacs
      • 编写源文件
  • 程序开发

    • 程序开发步骤
      • 苏格拉底挑战


      • 创建源文件
      • 用gcc把源文件转换成二进制可执行文件
        • 把C源文件转化成汇编代码文件
        • 把汇编代码转化成目标代码
        • 链接
        • 苏格拉底挑战


    • 动态链接优点
      • 可减小每个a.out文件的大小
      • 许多执行程序可在内存中共享相同的库函数
      • 修改库函数不需要重新编译源文件
    • 可执行文件格式
      • 二进制可执行平面文件:仅包含可执行代码和初始化数据。
      • a.out可执行文件:传统的a.out文件包含文件头,然后就是代码段、数据段和bss段
      • ELF可执行文件:可执行的链接格式包含一个或多个程序段
    • a.out文件的内容
      • 文件头
        • tsize=代码段大小
        • dsize=包含初始化全局变量和初始化静态局部变量的数据段大小
        • bsize=包含未初始化全局变量和未初始化静态局部变量的bss段大小
        • total_size=加载的a.out文件的总大小
      • 代码段:也称正文段,包含程序的可执行代码
      • 数据段:数据段包含初始化全局变量和初始化静态数据
      • 符号段:可选,仅为运行调试所需
    • 程序执行过程
      • 读取a.out文件,以确定所需总内存大小
      • sh从总大小中分配一个内存区给执行映像
      • 然后sh放弃旧映像,开始执行新映像
      • 执行从crt0.o开始,调用main(),将argc和argv作为参数传给main()。
    • 程序终止
      • 正常终止
      • 异常终止
  • C语言中的函数调用

    • long jump
  • C语言程序与汇编代码的链接

    • gcc生成的汇编代码
      • 入口代码
      • 函数体代码
      • 退出代码
  • 链接库

    • 静态链接库
      gcc -c mysum.c
      ar rcs libmylib.a mysum.o
      gcc -static t.c -L. -lmylib
      a.out
    • 动态链接库
      gcc -c -fPIC mysum.c
      gcc -shared -o libmylib.so my sum.o
      gcc t.c -L -lmylib
      export LD_LIBRARY_PATH=./
      a.out
  • makefile

    • makefile格式
      • 目标项
      • 依赖项
  • GDB调试工具

    • 在emacs IDE中使用GDB
      • 在X—Windows下,打开一个伪终端,使用emacs创建makefile
      • 编译源代码
      • 启动GDB
      • 多窗口GDB
        • Gud-t:用户命令和GDB消息的GDB缓冲区。
        • t.c:显示执行进度的程序源代码。
        • 栈帧:显示函数调用序列的栈帧。
        • 本地寄存区:显示当前执行函数中的局部变量。
        • 输入/输出
        • 断点:显示当前断点设置
      • 附加GDB命令 :
清除断点:
clear line#:清除 line#的断点。
clear name:清除函数(名字为name)中的断点。
更改变量值:
set vara=100:设变量a为100。
set varb=200:设变量b为200,以此类推
监视变量值改变:
watch c:监视变量c值改变:每当c的值变化时,将显示其旧值和新值
回溯追踪(bt):
btstackFrame#:回溯追踪栈顿。

遇到的问题

对gcc过程还不是很理解

解决过程

标签:文件,gcc,GDB,笔记,学习,Unix,Linux,out
From: https://www.cnblogs.com/gao0818/p/17690913.html

相关文章

  • 第1、2章学习笔记
    教材第一、二章读书笔记主要内容第一章主要学习了Unix的历史、开发及其各种发行版,列出了适用于Linux的各种硬件平台和虚拟机,揭示了常用的命令和文件系统组织、文件类型。第二章主要学习了基于GUI的编辑器,展示了如何在命令和GUI模式下使用EMACS编辑器来边集、编译和执行C语言......
  • 学习笔记1
    1.知识点归纳①Ubuntu②如何安装虚拟机③如何下载VMwareWorkstation④Unix/Linux命令2.问题与解决过程......
  • 经典接雨水-刷题笔记
    leetcode42按行求(测试用例通过,但超时)classSolution{publicinttrap(int[]height){intres=0;intn=height.length;intmaxh=0;for(inti=0;i<n;i++){maxh=Math.max(maxh,height[i]);}for(intr......
  • 20211421《信息安全系统设计与实现》第一周学习笔记
    知识点总结第一章关于本书研究Unix/Linux系统编程的专著,涵盖Unix/Linux的所有基本组件,包括进程管理、并发编程、定时器和时钟服务、文件系统、网络编程和MySQL数据库系统。本书目标强化学生编程背景知识动态数据结构的应用进程概念和进程管理并发编程定时器和定时功能......
  • 机器学习算法原理实现——cart决策树
      cart决策树示例: 本文目标,仿照sklearn写一个cart树,但是仅仅使用max_depth作为剪枝依据。   我们本次实现cart分类,因此用到gini指数: 为了帮助理解:  好了,理解了基尼指数。我们看下cart树的构建步骤:注意还有几个细节: cart树每个treenode存储......
  • 学习笔记1
    ChatGpt的苏格拉底挑战:有关内核:linux系统的核心是内核。内核控制着计算机系统的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。内核主要负责以下4种功能。·系统内存管理·软件程序管理·硬件设备管理·文件系统管理  有关GCC:GNUCompilerCollection,编译器集合......
  • Node.js+Express+Koa2开发接口学习笔记(二)
    搭建开发环境从0开始搭建,不适用任何框架使用nodemon监测文件变化,自动重启node使用cross-env设置环境变量,兼容maxlinux和windows创建项目文件夹blog-1,在终端输入命令npminit-y在根目录下创建bin=>www.js文件,将初次运行的文件www.js存放在bin目录下。同时需要修改pack......
  • 20211314王艺达信息安全系统设计与实现学习笔记(1)
    作业要求链接https://www.mosoteach.cn/web/index.php?c=interaction_homework&m=s_write&clazz_course_id=97072AE7-2C45-11EE-8539-1C34DA7B3F7C&id=F3080EAA-E3B7-414E-B311-938F0B8988F0&order_item=group&status=IN_PRGRS第一章学习总结及自测知识点归纳什么是Unix/Linux......
  • 【学习笔记】折半搜索 Meet In The Middle
    点击查看目录目录算法实现杂题乱写[CEOI2015Day2]世界冰球锦标赛题单oi-wiki算法实现我们正常的搜索应该是一个指数级的:\(2^n\)。然而我们可以把这个搜索拆成两半,设小于整张图的限制\(limit\)为合法:对于上半搜索,我们有若干符合限制的答案\(sum_1\),对于下半搜索,我......
  • swift5笔记(五):字典
    swift5笔记(五):字典Harry__Li关注IP属地:陕西2022.10.3115:48:06字数31阅读176初始化swift中需要指出字典中的类型//初始化字典varmdict:[String:Any]=[:]varmdict1=[String:Any]()letdict:[String:Any]=["name":"lhr","age":"100"]增加......