19-可执行文件:静态链接和加载
19-可执行文件:静态链接和加载
execve(加载)把当前的进程重置成指定可执行文件的初始状态
可执行文件:一个状态机初始状态的数据结构
里面规定了加载该可执行文件后地址空间里该有什么数据(寄存器,代码段等)
状态:内存和寄存器
elf为了性能丧失了阅读友好性
magic number是什么
Magic number一般是指硬写到代码里的整数常量,数值是编程者自己指定的,其他人不知道数值有什么具体意义,表示不明觉厉,就称作magic number。
a.out
设计一个可读的可执行文件,需要什么(代码,符号,重定位)
FLE 加载器:只做一件事
- 将一段字节序列复制到地址空间中
- 赋予可读、可写、可执行权限
- 然后跳转到 _start 执行
ELF 并没有多做多少
- 将多段字节序列复制到地址空间中
- 分别赋予可读/可写/可执行权限
- 然后跳转到指定的 entry (默认为 _start) 执行
#!/bin/bash
1 | #!A B C |
argc[0] = A
argv[1] = B C
argv[2]该 程序的名称