os课程记录

操作系统的系统调用

应用程序是可执行文件(程序的二进制代码和数据)和其他数据文件,linux支持多种可执行文件格式,ELF(Executable Linkable Format)是最常用的格式。

关于ELF二进制文件,它是操作系统的一个对象,操作系统提供API打开,读取,改写对应文件,可以使用vim,cat,xxd等命令查看这个可执行文件。
查看ELF二进制文件。

vi /bin/ls

解析二进制文件。主要关注文件的header,包括文件内容的分布,指令集体系的结构,入口地址。

readelf -h查看文件头数据, -l程序头
查看elf的文件:vi /usr/include/elf.h

file查看

运行的程序叫做进程。操作系统中有很多进程对象,在运行时,程序会在cpu上执行,进行计算,使用操作系统API访问操作系统的其他对象。ps查看系统进程。

file #查看文件类型
coreutils,unilix的核心工具包

c程序的测试

gdb使用,gdb的手册地址:
https://sourceware.org/gdb/documentation/

gcc使用,c和c++的的编译器。

ld的使用,gnu链接器,将目标文件或者库链接为可执行程序或者库文件。

ld hello.o
ld: warning: cannot find entry symbol _start; defaulting to 00000000004000b0
hello.o: In function main': hello.c:(.text+0xa): undefined reference toputs’

puts

objdump查看object文件信息。
  • objdump -d 将代码段反汇编;
  • objdump -S < file> 代码反汇编的同时,将反汇编代码与源代码交替显示,编译时需要使用-g参数,即需要调试信息;
什么事C语言的运行环境。
  • 将c语言代码编译/链接成为ELF目标文件的命令
  • 二进制文件在bare-metal上运行必要的其它部件
  • 生成系统镜像文件的脚本。
  • 平台相关的启动脚本。

x86 Family: CPU Reset行为
CPU Reset(官方手册:),reset之后,寄存器会有初始状态。例如EIP=0x0000fff0; CR0=0x60000010,并且处于16-bit模式。EFLAGS=0x00000002,且中断处于关闭状态。cpu和固件厂商达成的协议,硬件厂商,把固件以内存映射的方式,映射到地址上,因此固件程序就可以执行了。Firmware(固件):BIOS vs UEFI(都是硬件生产厂商的在计算机系统里写入的固件)
Legacy BIOS把引导盘(第一个可以启动的设备)的第一个扇区(主引导扇区,512Bytes)加载到内存的7c00位置。处理器处于16-bit模式,没有其他的任何约束。代码的执行权交付出去,软件和硬件之间的桥梁。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值