程序员的自我修养 学习笔记

ELF文件结构描述

  • ELF HEADER : 描述ELF文件信息
  • Section Table :各个段的信息,段名,长度等
  • rel.text :重定位表
  • string:符号的名字
  • symtab:符号表,符号以及对应的值
  • text: 代码段
  • .data .rodata : 分别存放初始化的静态变量,只读常量
  • bss: 未初始化的静态变量

//其他段

  • comment:注释
  1. 符号是变量与函数的统称
  2. 由于c++与c对修改符号签名的方式不一样,所以为了保证c++能够正确链接c函数的库,c++需要进行这样的操作,可保证这部分按照c的形式修饰符号。extern "C" {}
  • 编译器将全局未初始化的变量定义为弱符号
  • 编译器本生不支持弱变量类型的检查,下面是可以正常编译的
double a=1;  //a.cpp
extern int a; //main.cpp 
  • 函数级别的链接,可以避免链接其他不用的函数,来达到省内存的目的。

  • C 运行时库把不同的操作系统做了兼容,包装成固定的接口。

系统中断

操作系统如何进入中断:

  • int 0x2e可以触发 (windows)
  • int 0x80可以触发 (linux)

以linux 为例, 常见的系统调用实际上是一个"二级"调用

  1. 将中断号存入eax寄存器(系统调用函数)
  2. int 0x80为例 (0X80 指的是中断向量表中的函数)
  3. 获取中断号(80),并且执行对应函数。
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值