Mac下安装i386编译工具

在学习《Orange‘S:一个操作系统的实现》时,作者使用nasm和gcc生成ELF文件,然后使用ld命令链接。但是他是在Linux上做的,Mac系统的gcc(clang)只能生成Mac自己的macho64格式的C中间文件,所以需要安装i386编译工具。

由于书中是在IA32上开发的,所以所有的汇编和C语言都必须编译为32位的ELF,所以我选择了i386系列工具。如果有想要其他架构和平台的,过程也差不多。

参考博客为Dani Rodríguez的博客(好像要翻墙)

gcc生成32位的nasm汇编代码

使用gcc的时候只能产生masm的汇编代码。但是masm不是跨平台的,一般开发的时候都是用nasm进行汇编。但是gcc不能直接生成nasm汇编代码。这里记录了生成nasm汇编代码的方法。

答案来源于stackoverflow。此实验已经在Mac系统上已经尝试成功过。

C/C++不定参数注意事项

这里主要说明的是使用va_arg,va_start,va_end宏得到的不定参数。

主要坑爹的地方在于,va_arg这个宏的第二个参数——取出的数值类型,必须是int或者double,而不能是float,char等。如果你在调用函数的时候,char,unsigned char等实数会转化为int,而float会转化为double:

计算机网络-6-链路层

《计算机网络:自顶向下方法》的学习笔记。

这一章记录链路层有关知识

计算机网络-4-网络层-IP协议

《计算机网络:自顶向下方法》的学习笔记。

IP协议存在于网络层,网络层是将运输层送到网络边缘的分组发送到路由器的层。而IP协议就是运行在网络层的协议。

计算机网络-3-运输层

《计算机网络:自顶向下方法》的学习笔记。

运输层是只工作在端系统的层,用于将应用程序的网络消息传输到网络边缘,以及从网络边缘得到数据并发送给应用程序。

运输层的中点是TCP和UDP协议,重点中的重点是TCP协议。

如果你想要详细了解TCP,UDP以及网络层的IP,ICMP协议的话,强烈推荐你去看《TCP/IP详解:卷一》