要写kernel当然要知道如何用一些常用的工具检查编译出来的object file, 如何手动链接等知识啦:
making a plain binary file using a C compiler(i386+).pdf
从这里,我终于搞清楚了C中的varadic function parameter是怎么实现的。其实就是编译器内建:
#define va_start(v,l) __builtin_va_start(v,l) #define va_end(v) __builtin_va_end(v) #define va_arg(v,l) __builtin_va_arg(v,l) #if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L #define va_copy(d,s) __builtin_va_copy(d,s) #endif #define __va_copy(d,s) __builtin_va_copy(d,s)
诸如 __builtin_va_start(v,l) 和 __builtin_va_end(v) 其实就是C编译器的built-in support。(GCC的源码)
Ref: http://stackoverflow.com/questions/205529/passing-variable-number-of-arguments-around
:)
Last Edit: 2016-10-02