标签(空格分隔): 20135328陈都linux
陈都 原创做品转载请注明出处 《Linux内核分析》MOOC课程 http://mooc.study.163.com/course/USTC-1000029000shell
gcc -E -o XX.cpp XX.c (-m32)//.cpp是预处理文件
gcc -x cpp-output -S -o hello.s hello.cpp (-m32)//.s是汇编代码
gcc -x assembler -c hello.s -o hello.o (-m32)
gcc -o hello.static hello.c (-m32) -static
左半边是ELF格式,右半边是执行时的格式
其中,ELF头描述了该文件的组织状况,程序投标告诉系统如何建立一个进程的内存映像,section头表包含了描述文件sections的信息。
当系统要执行一个文件的时候,理论上讲,他会把程序段拷贝到虚拟内存中某个段编辑器
通常咱们执行一个程序的Shell环境,咱们的实验直接使用execve系统调用。
Shell自己不限制命令行参数的个数,命令行参数的个数受限于命令自身
例如,int main(int argc, char *argv[])
又如, int main(int argc, char argv[], char
envp[])//envp是shell的执行环境
Shell会调用execve将命令行参数和环境参数传递给可执行程序的main函数函数
int execve(const char * filename,char * const argv[ ],char * const envp[ ]);
动态连接分为可执行程序装载时动态连接和运行时动态连接(通常使用前者)学习