19-可执行文件:静态链接和加载

19-可执行文件:静态链接和加载

execve(加载)把当前的进程重置成指定可执行文件的初始状态

可执行文件:一个状态机初始状态的数据结构

里面规定了加载该可执行文件后地址空间里该有什么数据(寄存器,代码段等)

状态:内存和寄存器

elf为了性能丧失了阅读友好性

magic number是什么

Magic number一般是指硬写到代码里的整数常量,数值是编程者自己指定的,其他人不知道数值有什么具体意义,表示不明觉厉,就称作magic number。

a.out

设计一个可读的可执行文件,需要什么(代码,符号,重定位)

FLE 加载器:只做一件事

  • 将一段字节序列复制到地址空间中
    • 赋予可读、可写、可执行权限
  • 然后跳转到 _start 执行

ELF 并没有多做多少

  • 将多段字节序列复制到地址空间中
    • 分别赋予可读/可写/可执行权限
  • 然后跳转到指定的 entry (默认为 _start) 执行

#!/bin/bash

1
2
#!A B C
THIS

argc[0] = A

argv[1] = B C

argv[2]该 程序的名称