misc: looking into the binary

要写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 

原文地址:https://www.cnblogs.com/walkerlala/p/5638262.html