写出C语言
在Chapter5B的foo.asm中,有如下典型的入栈结构,即push-call-add esp,有了堆栈,才有了C语言的运行。如果没有堆栈,C语言无法形成嵌套结构。
_start:
push dword [num2nd] ; `.
push dword [num1st] ; |
call choose ; | choose(num1st, num2nd);
add esp, 8 ; /
mov ebx, 0
mov eax, 1 ; sys_exit
int 0x80 ; 系统调用
而且,参数列表最后的参数先入栈,参数列表最前的参数后入栈。
call之后会自动pop,不用通过显式指令手动出栈。
生成目标文件的过程是组件编译CC的过程;
生成可执行文件的过程是在上述过程的基础上,增加了链接LD的过程。
至于global和extern等语法层面的事情,可以在完全进入C语言编程之后细细解决。
第一个把ELF格式的文件拆解成BIN文件的程序肯定是汇编的。
就是loader.asm。
loader.asm根据ELF文件信息转移到正确的位置。找到每个Program header,根据其信息进行内存复制。