目录
0.0、先吹一波牛
《深入理解计算机系统》大名不用我多说了吧,在计算机领学习工作,尤其是软件方向,不知道这本书,都不好意思说自己是学过计算机。其以豆瓣评分9.7的高分,位居“豆瓣热门编程图书TOP10”之榜首。可谓程序员的必读数,说来忏愧,本人在读了本书之后,深感过去愧对于“程序员”这个称号。话不多说,我们正式开扯。
1.0、学习的目标和内容
本书开篇明确表示,“如果你全力投入学习本书中的概念,完全理解底层计算机系统以及它对应用程序的影响,那么你会步上为数不多的‘大牛’的道路”。所以我们学习这本书的目标就是什么?没错就是成为“大牛”、成为“大牛”、成为“大牛”;要成为“大牛”学习的程度是,完全理解底层计算机系统及它对应用程序的影响;真可谓“路漫漫而其修远兮”。
那么具体要学些什么呢?下面是重头戏“学习内容”:
*计算机表示数字的方式(大小端);
*C代码优化以充分利用现代处理器和存储器系统的设计(多核多线程、高并发等);
*编译器如何实现过程调用(我的知识盲区,查漏补缺,我要做“大牛”。越是害怕自己无知就越会落入无知。所谓“知之为知之,不知为不知,是智也”。);
老师长教导我们学习时要问自己四个问题:是什么,为什么,能做什么,怎么做;而首要任务时知道这个技术能做什么。不然花了大量的精力,最终发现学的知识对自己没有用,正所谓“以有涯随无涯,殆矣”。同理我们学习本书的首要任务是知道本书中的知识能做什么:
*避免缓冲区溢出(非缓冲区数据被覆盖,弱点高发区是网络和英特网。除了因特网,还有局域网、城域网、个人网,这些一般属于为内网);
*识别和避免链接时错误(书中明确指出,这个问题会困扰普通程序员,所以界定标准出现了,只有能够识别和避免链接错误才能摆脱“普通程序员”。所以我目前其实只是平庸的“普通程序员”。我不懂,但是我要做大牛。);
*编写Unix Shell、动态存储分配包、Web服务器(这些都是每天在使用的东西,但是不知道其工作原理,从使用者道生产者即是从普通到“大牛”,其本质是从会到懂。)
*认识并发带来的希望和陷阱(多核多线程下的数据同步和数据锁问题)
最后是学习方式——先沿着编程入门标准第一个程序“hello world”的生命周期简要的介绍,再围绕这些内容展开。主打一个由表及里,由点即面的学习方式。该学习方式有其优点也有其缺点,优点是前期可快速产生共鸣,以提升学习兴趣。但是到了后期,因为其于日常偏离,且没有最终统一目标,会导致学习动力衰退的情况。所以学习过程中一旦发现自己热情减退,一定要翻回第一张,看看自己的初心——我要做“大牛”。
1.1、信息就是位+上下文
其中讲到源程序、位序列、字节、字符、ASCII、文本文件、二进制文件、上下文(context)。
所谓源程序就是程序员每天复制粘贴的、上传到git上的、搬来搬去的砖。用一个方便面理解的方法来说就是“保存了源码的文件”。任何文件都是由为序列组成的,而以8位为一个字节,至于位序列如何翻译,就要看使用的标准了。在ASCII码中每1个字节表示1个字符。而在GB2312码中每2个字节表示1个字符。而只由此类字符构成的文件称为文本文件,其他编码还有UTF-8、Unicode等。而其他的文件都称为二进制文件,如*.exe、*.png、*.mp3、*.mp4、*.zip、*.pdf等。需要注意的是即使二进制文件中包含文本数据,其依然是二进制文件。而区分这些不同的数据的唯一的方法是当前数据的上下文(context),本人一直不太喜欢“上下文”这个翻译,因为“上下文”无法完全表示出“context”的含义,如果使用“关联文”翻译更加合适。这样无论“context”是否注重表达上下文的意思,都可以完全表达其含义,因为关联文包含了上下文的含义——仅表示个人想法,勿喷勿吹。
1.2、程序被其他程序翻译成不同的格式
众所周知,源码转换为目标程序,也就是可执行目标文件,需要GCC编译器驱动。这个过程会经过预处理器(cpp)、编译器(ccl)、汇编器(as)、链接器(ld),以C语言,Windows10系统,Hello World程序为例。
#include <stdio.h>
int main()
{
printf("hello, world\n");
return 0;
}
*预处理器的作用:将以字符#开头的命令,执行合并到源程序中,文件以*.i的后缀名保存;
# 1 "hello.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "hello.c"
# 1 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 1 3
# 9 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
# 1 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/crtdefs.h" 1 3
# 10 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/crtdefs.h" 3
# 1 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw.h" 1 3
# 12 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw.h" 3
# 1 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h" 1 3
# 98 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h" 3
# 107 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw_mac.h" 3
# 13 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw.h" 2 3
# 1 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw_secapi.h" 1 3
# 14 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw.h" 2 3
# 282 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw.h" 3
# 1 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/vadefs.h" 1 3
# 9 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/vadefs.h" 3
# 1 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw.h" 1 3
# 578 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw.h" 3
# 1 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_directx.h" 1 3
# 579 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw.h" 2 3
# 1 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/sdks/_mingw_ddk.h" 1 3
# 580 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw.h" 2 3
# 10 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/vadefs.h" 2 3
#pragma pack(push,_CRT_PACKING)
# 24 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/vadefs.h" 3
# 24 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/vadefs.h" 3
typedef __builtin_va_list __gnuc_va_list;
typedef __gnuc_va_list va_list;
# 103 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/vadefs.h" 3
#pragma pack(pop)
# 283 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw.h" 2 3
# 552 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw.h" 3
void __attribute__((__cdecl__)) __debugbreak(void);
extern __inline__ __attribute__((__always_inline__,__gnu_inline__)) void __attribute__((__cdecl__)) __debugbreak(void)
{
__asm__ __volatile__("int {$}3":);
}
const char *__mingw_get_crt_info (void);
# 11 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/crtdefs.h" 2 3
#pragma pack(push,_CRT_PACKING)
# 35 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/crtdefs.h" 3
__extension__ typedef unsigned long long size_t;
# 45 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/crtdefs.h" 3
__extension__ typedef long long ssize_t;
typedef size_t rsize_t;
# 62 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/crtdefs.h" 3
__extension__ typedef long long intptr_t;
# 75 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/crtdefs.h" 3
__extension__ typedef unsigned long long uintptr_t;
# 88 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/crtdefs.h" 3
__extension__ typedef long long ptrdiff_t;
# 98 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/crtdefs.h" 3
typedef unsigned short wchar_t;
typedef unsigned short wint_t;
typedef unsigned short wctype_t;
typedef int errno_t;
typedef long __time32_t;
__extension__ typedef long long __time64_t;
# 138 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/crtdefs.h" 3
typedef __time64_t time_t;
# 422 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/crtdefs.h" 3
struct threadlocaleinfostruct;
struct threadmbcinfostruct;
typedef struct threadlocaleinfostruct *pthreadlocinfo;
typedef struct threadmbcinfostruct *pthreadmbcinfo;
struct __lc_time_data;
typedef struct localeinfo_struct {
pthreadlocinfo locinfo;
pthreadmbcinfo mbcinfo;
} _locale_tstruct,*_locale_t;
typedef struct tagLC_ID {
unsigned short wLanguage;
unsigned short wCountry;
unsigned short wCodePage;
} LC_ID,*LPLC_ID;
typedef struct threadlocaleinfostruct {
int refcount;
unsigned int lc_codepage;
unsigned int lc_collate_cp;
unsigned long lc_handle[6];
LC_ID lc_id[6];
struct {
char *locale;
wchar_t *wlocale;
int *refcount;
int *wrefcount;
} lc_category[6];
int lc_clike;
int mb_cur_max;
int *lconv_intl_refcount;
int *lconv_num_refcount;
int *lconv_mon_refcount;
struct lconv *lconv;
int *ctype1_refcount;
unsigned short *ctype1;
const unsigned short *pctype;
const unsigned char *pclmap;
const unsigned char *pcumap;
struct __lc_time_data *lc_time_curr;
} threadlocinfo;
#pragma pack(pop)
# 10 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 2 3
# 1 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw_print_push.h" 1 3
# 12 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 2 3
#pragma pack(push,_CRT_PACKING)
# 26 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
# 80 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
# 1 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h" 1 3
typedef long _off_t;
typedef long off32_t;
__extension__ typedef long long _off64_t;
__extension__ typedef long long off64_t;
# 26 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw_off_t.h" 3
typedef off32_t off_t;
# 81 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 2 3
__attribute__ ((__dllimport__)) FILE *__attribute__((__cdecl__)) __acrt_iob_func(unsigned index);
__attribute__ ((__dllimport__)) FILE *__attribute__((__cdecl__)) __iob_func(void);
# 104 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
__extension__ typedef long long fpos_t;
# 162 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
extern
__attribute__((__format__ (gnu_scanf, 2, 3))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_sscanf(const char * __restrict__ _Src,const char * __restrict__ _Format,...);
extern
__attribute__((__format__ (gnu_scanf, 2, 0))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_vsscanf (const char * __restrict__ _Str,const char * __restrict__ Format,va_list argp);
extern
__attribute__((__format__ (gnu_scanf, 1, 2))) __attribute__ ((__nonnull__ (1)))
int __attribute__((__cdecl__)) __mingw_scanf(const char * __restrict__ _Format,...);
extern
__attribute__((__format__ (gnu_scanf, 1, 0))) __attribute__ ((__nonnull__ (1)))
int __attribute__((__cdecl__)) __mingw_vscanf(const char * __restrict__ Format, va_list argp);
extern
__attribute__((__format__ (gnu_scanf, 2, 3))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_fscanf(FILE * __restrict__ _File,const char * __restrict__ _Format,...);
extern
__attribute__((__format__ (gnu_scanf, 2, 0))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_vfscanf (FILE * __restrict__ fp, const char * __restrict__ Format,va_list argp);
extern
__attribute__((__format__ (gnu_printf, 3, 0))) __attribute__ ((__nonnull__ (3)))
int __attribute__((__cdecl__)) __mingw_vsnprintf(char * __restrict__ _DstBuf,size_t _MaxCount,const char * __restrict__ _Format,
va_list _ArgList);
extern
__attribute__((__format__ (gnu_printf, 3, 4))) __attribute__ ((__nonnull__ (3)))
int __attribute__((__cdecl__)) __mingw_snprintf(char * __restrict__ s, size_t n, const char * __restrict__ format, ...);
extern
__attribute__((__format__ (gnu_printf, 1, 2))) __attribute__ ((__nonnull__ (1)))
int __attribute__((__cdecl__)) __mingw_printf(const char * __restrict__ , ... ) __attribute__ ((__nothrow__));
extern
__attribute__((__format__ (gnu_printf, 1, 0))) __attribute__ ((__nonnull__ (1)))
int __attribute__((__cdecl__)) __mingw_vprintf (const char * __restrict__ , va_list) __attribute__ ((__nothrow__));
extern
__attribute__((__format__ (gnu_printf, 2, 3))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_fprintf (FILE * __restrict__ , const char * __restrict__ , ...) __attribute__ ((__nothrow__));
extern
__attribute__((__format__ (gnu_printf, 2, 0))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_vfprintf (FILE * __restrict__ , const char * __restrict__ , va_list) __attribute__ ((__nothrow__));
extern
__attribute__((__format__ (gnu_printf, 2, 3))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_sprintf (char * __restrict__ , const char * __restrict__ , ...) __attribute__ ((__nothrow__));
extern
__attribute__((__format__ (gnu_printf, 2, 0))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_vsprintf (char * __restrict__ , const char * __restrict__ , va_list) __attribute__ ((__nothrow__));
extern
__attribute__((__format__ (gnu_printf, 2, 3))) __attribute__((nonnull (1,2)))
int __attribute__((__cdecl__)) __mingw_asprintf(char ** __restrict__ , const char * __restrict__ , ...) __attribute__ ((__nothrow__));
extern
__attribute__((__format__ (gnu_printf, 2, 0))) __attribute__((nonnull (1,2)))
int __attribute__((__cdecl__)) __mingw_vasprintf(char ** __restrict__ , const char * __restrict__ , va_list) __attribute__ ((__nothrow__));
# 506 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
__attribute__((__format__ (ms_printf, 2, 3))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) fprintf(FILE * __restrict__ _File,const char * __restrict__ _Format,...);
__attribute__((__format__ (ms_printf, 1, 2))) __attribute__ ((__nonnull__ (1)))
int __attribute__((__cdecl__)) printf(const char * __restrict__ _Format,...);
__attribute__((__format__ (ms_printf, 2, 3))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) sprintf(char * __restrict__ _Dest,const char * __restrict__ _Format,...) ;
__attribute__((__format__ (ms_printf, 2, 0))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) vfprintf(FILE * __restrict__ _File,const char * __restrict__ _Format,va_list _ArgList);
__attribute__((__format__ (ms_printf, 1, 0))) __attribute__ ((__nonnull__ (1)))
int __attribute__((__cdecl__)) vprintf(const char * __restrict__ _Format,va_list _ArgList);
__attribute__((__format__ (ms_printf, 2, 0))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) vsprintf(char * __restrict__ _Dest,const char * __restrict__ _Format,va_list _Args) ;
__attribute__((__format__ (ms_scanf, 2, 3))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) fscanf(FILE * __restrict__ _File,const char * __restrict__ _Format,...) ;
__attribute__((__format__ (ms_scanf, 1, 2))) __attribute__ ((__nonnull__ (1)))
int __attribute__((__cdecl__)) scanf(const char * __restrict__ _Format,...) ;
__attribute__((__format__ (ms_scanf, 2, 3))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) sscanf(const char * __restrict__ _Src,const char * __restrict__ _Format,...) ;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wshadow"
__attribute__((__format__ (ms_scanf, 1, 0))) __attribute__ ((__nonnull__ (1)))
int __attribute__((__cdecl__)) __ms_vscanf(const char * __restrict__ Format, va_list argp);
__attribute__((__format__ (ms_scanf, 2, 0))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __ms_vfscanf (FILE * __restrict__ fp, const char * __restrict__ Format,va_list argp);
__attribute__((__format__ (ms_scanf, 2, 0))) __attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __ms_vsscanf (const char * __restrict__ _Str,const char * __restrict__ Format,va_list argp);
static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
__attribute__((__format__ (ms_scanf, 2, 0))) __attribute__ ((__nonnull__ (2)))
int vfscanf (FILE *__stream, const char *__format, __builtin_va_list __local_argv)
{
return __ms_vfscanf (__stream, __format, __local_argv);
}
static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
__attribute__((__format__ (ms_scanf, 2, 0))) __attribute__ ((__nonnull__ (2)))
int vsscanf (const char * __restrict__ __source, const char * __restrict__ __format, __builtin_va_list __local_argv)
{
return __ms_vsscanf( __source, __format, __local_argv );
}
static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
__attribute__((__format__ (ms_scanf, 1, 0))) __attribute__ ((__nonnull__ (1)))
int vscanf(const char *__format, __builtin_va_list __local_argv)
{
return __ms_vscanf (__format, __local_argv);
}
#pragma GCC diagnostic pop
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _filbuf(FILE *_File);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _flsbuf(int _Ch,FILE *_File);
__attribute__ ((__dllimport__)) FILE *__attribute__((__cdecl__)) _fsopen(const char *_Filename,const char *_Mode,int _ShFlag);
void __attribute__((__cdecl__)) clearerr(FILE *_File);
int __attribute__((__cdecl__)) fclose(FILE *_File);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fcloseall(void);
__attribute__ ((__dllimport__)) FILE *__attribute__((__cdecl__)) _fdopen(int _FileHandle,const char *_Mode);
int __attribute__((__cdecl__)) feof(FILE *_File);
int __attribute__((__cdecl__)) ferror(FILE *_File);
int __attribute__((__cdecl__)) fflush(FILE *_File);
int __attribute__((__cdecl__)) fgetc(FILE *_File);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fgetchar(void);
int __attribute__((__cdecl__)) fgetpos(FILE * __restrict__ _File ,fpos_t * __restrict__ _Pos);
int __attribute__((__cdecl__)) fgetpos64(FILE * __restrict__ _File ,fpos_t * __restrict__ _Pos);
char *__attribute__((__cdecl__)) fgets(char * __restrict__ _Buf,int _MaxCount,FILE * __restrict__ _File);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fileno(FILE *_File);
__attribute__ ((__dllimport__)) char *__attribute__((__cdecl__)) _tempnam(const char *_DirName,const char *_FilePrefix);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _flushall(void);
FILE *__attribute__((__cdecl__)) fopen(const char * __restrict__ _Filename,const char * __restrict__ _Mode) ;
FILE *fopen64(const char * __restrict__ filename,const char * __restrict__ mode);
int __attribute__((__cdecl__)) fputc(int _Ch,FILE *_File);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fputchar(int _Ch);
int __attribute__((__cdecl__)) fputs(const char * __restrict__ _Str,FILE * __restrict__ _File);
size_t __attribute__((__cdecl__)) fread(void * __restrict__ _DstBuf,size_t _ElementSize,size_t _Count,FILE * __restrict__ _File);
FILE *__attribute__((__cdecl__)) freopen(const char * __restrict__ _Filename,const char * __restrict__ _Mode,FILE * __restrict__ _File) ;
int __attribute__((__cdecl__)) fsetpos(FILE *_File,const fpos_t *_Pos);
int __attribute__((__cdecl__)) fsetpos64(FILE *_File,const fpos_t *_Pos);
int __attribute__((__cdecl__)) fseek(FILE *_File,long _Offset,int _Origin);
long __attribute__((__cdecl__)) ftell(FILE *_File);
# 631 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
__extension__ int __attribute__((__cdecl__)) _fseeki64(FILE *_File,long long _Offset,int _Origin);
__extension__ long long __attribute__((__cdecl__)) _ftelli64(FILE *_File);
int fseeko64(FILE* stream, _off64_t offset, int whence);
int fseeko(FILE* stream, _off_t offset, int whence);
_off_t ftello(FILE * stream);
_off64_t ftello64(FILE * stream);
# 654 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
size_t __attribute__((__cdecl__)) fwrite(const void * __restrict__ _Str,size_t _Size,size_t _Count,FILE * __restrict__ _File);
int __attribute__((__cdecl__)) getc(FILE *_File);
int __attribute__((__cdecl__)) getchar(void);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _getmaxstdio(void);
char *__attribute__((__cdecl__)) gets(char *_Buffer) ;
int __attribute__((__cdecl__)) _getw(FILE *_File);
void __attribute__((__cdecl__)) perror(const char *_ErrMsg);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _pclose(FILE *_File);
__attribute__ ((__dllimport__)) FILE *__attribute__((__cdecl__)) _popen(const char *_Command,const char *_Mode);
int __attribute__((__cdecl__)) putc(int _Ch,FILE *_File);
int __attribute__((__cdecl__)) putchar(int _Ch);
int __attribute__((__cdecl__)) puts(const char *_Str);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _putw(int _Word,FILE *_File);
int __attribute__((__cdecl__)) remove(const char *_Filename);
int __attribute__((__cdecl__)) rename(const char *_OldFilename,const char *_NewFilename);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _unlink(const char *_Filename);
int __attribute__((__cdecl__)) unlink(const char *_Filename) ;
void __attribute__((__cdecl__)) rewind(FILE *_File);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _rmtmp(void);
void __attribute__((__cdecl__)) setbuf(FILE * __restrict__ _File,char * __restrict__ _Buffer) ;
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _setmaxstdio(int _Max);
__attribute__ ((__dllimport__)) unsigned int __attribute__((__cdecl__)) _set_output_format(unsigned int _Format);
__attribute__ ((__dllimport__)) unsigned int __attribute__((__cdecl__)) _get_output_format(void);
int __attribute__((__cdecl__)) setvbuf(FILE * __restrict__ _File,char * __restrict__ _Buf,int _Mode,size_t _Size);
# 712 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _scprintf(const char * __restrict__ _Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snscanf(const char * __restrict__ _Src,size_t _MaxCount,const char * __restrict__ _Format,...) ;
FILE *__attribute__((__cdecl__)) tmpfile(void) ;
char *__attribute__((__cdecl__)) tmpnam(char *_Buffer);
int __attribute__((__cdecl__)) ungetc(int _Ch,FILE *_File);
# 734 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
__attribute__((__format__ (ms_printf, 3, 4))) __attribute__ ((__nonnull__ (3)))
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snprintf(char * __restrict__ _Dest,size_t _Count,const char * __restrict__ _Format,...) ;
__attribute__((__format__ (ms_printf, 3, 0))) __attribute__ ((__nonnull__ (3)))
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsnprintf(char * __restrict__ _Dest,size_t _Count,const char * __restrict__ _Format,va_list _Args) ;
# 761 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wshadow"
__attribute__((__format__ (ms_printf, 3, 0))) __attribute__ ((__nonnull__ (3)))
int __attribute__((__cdecl__)) __ms_vsnprintf(char * __restrict__ d,size_t n,const char * __restrict__ format,va_list arg)
;
static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
__attribute__((__format__ (ms_printf, 3, 0))) __attribute__ ((__nonnull__ (3)))
int vsnprintf (char * __restrict__ __stream, size_t __n, const char * __restrict__ __format, va_list __local_argv)
{
return __ms_vsnprintf (__stream, __n, __format, __local_argv);
}
__attribute__((__format__ (ms_printf, 3, 4))) __attribute__ ((__nonnull__ (3)))
int __attribute__((__cdecl__)) __ms_snprintf(char * __restrict__ s, size_t n, const char * __restrict__ format, ...);
static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
__attribute__((__format__ (ms_printf, 3, 4))) __attribute__ ((__nonnull__ (3)))
int snprintf (char * __restrict__ __stream, size_t __n, const char * __restrict__ __format, ...)
{
int __retval;
__builtin_va_list __local_argv; __builtin_va_start( __local_argv, __format );
__retval = __ms_vsnprintf (__stream, __n, __format, __local_argv);
__builtin_va_end( __local_argv );
return __retval;
}
#pragma GCC diagnostic pop
# 811 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vscprintf(const char * __restrict__ _Format,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _set_printf_count_output(int _Value);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _get_printf_count_output(void);
__attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_swscanf(const wchar_t * __restrict__ _Src,const wchar_t * __restrict__ _Format,...);
__attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_vswscanf (const wchar_t * __restrict__ _Str,const wchar_t * __restrict__ Format,va_list argp);
__attribute__ ((__nonnull__ (1)))
int __attribute__((__cdecl__)) __mingw_wscanf(const wchar_t * __restrict__ _Format,...);
__attribute__ ((__nonnull__ (1)))
int __attribute__((__cdecl__)) __mingw_vwscanf(const wchar_t * __restrict__ Format, va_list argp);
__attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_fwscanf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...);
__attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_vfwscanf (FILE * __restrict__ fp, const wchar_t * __restrict__ Format,va_list argp);
__attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_fwprintf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...);
__attribute__ ((__nonnull__ (1)))
int __attribute__((__cdecl__)) __mingw_wprintf(const wchar_t * __restrict__ _Format,...);
__attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_vfwprintf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,va_list _ArgList);
__attribute__ ((__nonnull__ (1)))
int __attribute__((__cdecl__)) __mingw_vwprintf(const wchar_t * __restrict__ _Format,va_list _ArgList);
__attribute__ ((__nonnull__ (3)))
int __attribute__((__cdecl__)) __mingw_snwprintf (wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, ...);
__attribute__ ((__nonnull__ (3)))
int __attribute__((__cdecl__)) __mingw_vsnwprintf (wchar_t * __restrict__ , size_t, const wchar_t * __restrict__ , va_list);
__attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_swprintf(wchar_t * __restrict__ , const wchar_t * __restrict__ , ...);
__attribute__ ((__nonnull__ (2)))
int __attribute__((__cdecl__)) __mingw_vswprintf(wchar_t * __restrict__ , const wchar_t * __restrict__ ,va_list);
# 1061 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
int __attribute__((__cdecl__)) fwscanf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...) ;
int __attribute__((__cdecl__)) swscanf(const wchar_t * __restrict__ _Src,const wchar_t * __restrict__ _Format,...) ;
int __attribute__((__cdecl__)) wscanf(const wchar_t * __restrict__ _Format,...) ;
int __attribute__((__cdecl__)) __ms_vwscanf (const wchar_t * __restrict__ , va_list);
int __attribute__((__cdecl__)) __ms_vfwscanf (FILE * __restrict__ ,const wchar_t * __restrict__ ,va_list);
int __attribute__((__cdecl__)) __ms_vswscanf (const wchar_t * __restrict__ ,const wchar_t * __restrict__ ,va_list);
static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
__attribute__ ((__nonnull__ (2)))
int vfwscanf (FILE *__stream, const wchar_t *__format, __builtin_va_list __local_argv)
{
return __ms_vfwscanf (__stream, __format, __local_argv);
}
static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
__attribute__ ((__nonnull__ (2)))
int vswscanf (const wchar_t * __restrict__ __source, const wchar_t * __restrict__ __format, __builtin_va_list __local_argv)
{
return __ms_vswscanf( __source, __format, __local_argv );
}
static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
__attribute__ ((__nonnull__ (1)))
int vwscanf(const wchar_t *__format, __builtin_va_list __local_argv)
{
return __ms_vwscanf (__format, __local_argv);
}
int __attribute__((__cdecl__)) fwprintf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...);
int __attribute__((__cdecl__)) wprintf(const wchar_t * __restrict__ _Format,...);
int __attribute__((__cdecl__)) vfwprintf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,va_list _ArgList);
int __attribute__((__cdecl__)) vwprintf(const wchar_t * __restrict__ _Format,va_list _ArgList);
# 1105 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
__attribute__ ((__dllimport__)) FILE *__attribute__((__cdecl__)) _wfsopen(const wchar_t *_Filename,const wchar_t *_Mode,int _ShFlag);
wint_t __attribute__((__cdecl__)) fgetwc(FILE *_File);
__attribute__ ((__dllimport__)) wint_t __attribute__((__cdecl__)) _fgetwchar(void);
wint_t __attribute__((__cdecl__)) fputwc(wchar_t _Ch,FILE *_File);
__attribute__ ((__dllimport__)) wint_t __attribute__((__cdecl__)) _fputwchar(wchar_t _Ch);
wint_t __attribute__((__cdecl__)) getwc(FILE *_File);
wint_t __attribute__((__cdecl__)) getwchar(void);
wint_t __attribute__((__cdecl__)) putwc(wchar_t _Ch,FILE *_File);
wint_t __attribute__((__cdecl__)) putwchar(wchar_t _Ch);
wint_t __attribute__((__cdecl__)) ungetwc(wint_t _Ch,FILE *_File);
wchar_t *__attribute__((__cdecl__)) fgetws(wchar_t * __restrict__ _Dst,int _SizeInWords,FILE * __restrict__ _File);
int __attribute__((__cdecl__)) fputws(const wchar_t * __restrict__ _Str,FILE * __restrict__ _File);
__attribute__ ((__dllimport__)) wchar_t *__attribute__((__cdecl__)) _getws(wchar_t *_String) ;
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _putws(const wchar_t *_Str);
# 1183 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _scwprintf(const wchar_t * __restrict__ _Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _swprintf_c(wchar_t * __restrict__ _DstBuf,size_t _SizeInWords,const wchar_t * __restrict__ _Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vswprintf_c(wchar_t * __restrict__ _DstBuf,size_t _SizeInWords,const wchar_t * __restrict__ _Format,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snwprintf(wchar_t * __restrict__ _Dest,size_t _Count,const wchar_t * __restrict__ _Format,...) ;
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsnwprintf(wchar_t * __restrict__ _Dest,size_t _Count,const wchar_t * __restrict__ _Format,va_list _Args) ;
int __attribute__((__cdecl__)) __ms_snwprintf (wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, ...);
int __attribute__((__cdecl__)) __ms_vsnwprintf (wchar_t * __restrict__ , size_t, const wchar_t * __restrict__ , va_list);
static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
int snwprintf (wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, ...)
{
int r;
va_list argp;
__builtin_va_start (argp, format);
r = _vsnwprintf (s, n, format, argp);
__builtin_va_end (argp);
return r;
}
static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
int __attribute__((__cdecl__)) vsnwprintf (wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, va_list arg)
{
return _vsnwprintf(s,n,format,arg);
}
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _swprintf(wchar_t * __restrict__ _Dest,const wchar_t * __restrict__ _Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vswprintf(wchar_t * __restrict__ _Dest,const wchar_t * __restrict__ _Format,va_list _Args);
# 1 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/swprintf.inl" 1 3
# 25 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/swprintf.inl" 3
static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
__attribute__ ((__nonnull__ (3)))
int vswprintf (wchar_t *__stream, size_t __count, const wchar_t *__format, __builtin_va_list __local_argv)
{
return vsnwprintf( __stream, __count, __format, __local_argv );
}
static __attribute__ ((__unused__)) __inline__ __attribute__((__cdecl__))
__attribute__ ((__nonnull__ (3)))
int swprintf (wchar_t *__stream, size_t __count, const wchar_t *__format, ...)
{
int __retval;
__builtin_va_list __local_argv;
__builtin_va_start( __local_argv, __format );
__retval = vswprintf( __stream, __count, __format, __local_argv );
__builtin_va_end( __local_argv );
return __retval;
}
# 1224 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 2 3
# 1233 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
__attribute__ ((__dllimport__)) wchar_t *__attribute__((__cdecl__)) _wtempnam(const wchar_t *_Directory,const wchar_t *_FilePrefix);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vscwprintf(const wchar_t * __restrict__ _Format,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snwscanf(const wchar_t * __restrict__ _Src,size_t _MaxCount,const wchar_t * __restrict__ _Format,...);
__attribute__ ((__dllimport__)) FILE *__attribute__((__cdecl__)) _wfdopen(int _FileHandle ,const wchar_t *_Mode);
__attribute__ ((__dllimport__)) FILE *__attribute__((__cdecl__)) _wfopen(const wchar_t * __restrict__ _Filename,const wchar_t *__restrict__ _Mode) ;
__attribute__ ((__dllimport__)) FILE *__attribute__((__cdecl__)) _wfreopen(const wchar_t * __restrict__ _Filename,const wchar_t * __restrict__ _Mode,FILE * __restrict__ _OldFile) ;
__attribute__ ((__dllimport__)) void __attribute__((__cdecl__)) _wperror(const wchar_t *_ErrMsg);
__attribute__ ((__dllimport__)) FILE *__attribute__((__cdecl__)) _wpopen(const wchar_t *_Command,const wchar_t *_Mode);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _wremove(const wchar_t *_Filename);
__attribute__ ((__dllimport__)) wchar_t *__attribute__((__cdecl__)) _wtmpnam(wchar_t *_Buffer);
__attribute__ ((__dllimport__)) wint_t __attribute__((__cdecl__)) _fgetwc_nolock(FILE *_File);
__attribute__ ((__dllimport__)) wint_t __attribute__((__cdecl__)) _fputwc_nolock(wchar_t _Ch,FILE *_File);
__attribute__ ((__dllimport__)) wint_t __attribute__((__cdecl__)) _ungetwc_nolock(wint_t _Ch,FILE *_File);
# 1290 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
__attribute__ ((__dllimport__)) void __attribute__((__cdecl__)) _lock_file(FILE *_File);
__attribute__ ((__dllimport__)) void __attribute__((__cdecl__)) _unlock_file(FILE *_File);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fclose_nolock(FILE *_File);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fflush_nolock(FILE *_File);
__attribute__ ((__dllimport__)) size_t __attribute__((__cdecl__)) _fread_nolock(void * __restrict__ _DstBuf,size_t _ElementSize,size_t _Count,FILE * __restrict__ _File);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fseek_nolock(FILE *_File,long _Offset,int _Origin);
__attribute__ ((__dllimport__)) long __attribute__((__cdecl__)) _ftell_nolock(FILE *_File);
__extension__ __attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fseeki64_nolock(FILE *_File,long long _Offset,int _Origin);
__extension__ __attribute__ ((__dllimport__)) long long __attribute__((__cdecl__)) _ftelli64_nolock(FILE *_File);
__attribute__ ((__dllimport__)) size_t __attribute__((__cdecl__)) _fwrite_nolock(const void * __restrict__ _DstBuf,size_t _Size,size_t _Count,FILE * __restrict__ _File);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _ungetc_nolock(int _Ch,FILE *_File);
char *__attribute__((__cdecl__)) tempnam(const char *_Directory,const char *_FilePrefix) ;
int __attribute__((__cdecl__)) fcloseall(void) ;
FILE *__attribute__((__cdecl__)) fdopen(int _FileHandle,const char *_Format) ;
int __attribute__((__cdecl__)) fgetchar(void) ;
int __attribute__((__cdecl__)) fileno(FILE *_File) ;
int __attribute__((__cdecl__)) flushall(void) ;
int __attribute__((__cdecl__)) fputchar(int _Ch) ;
int __attribute__((__cdecl__)) getw(FILE *_File) ;
int __attribute__((__cdecl__)) putw(int _Ch,FILE *_File) ;
int __attribute__((__cdecl__)) rmtmp(void) ;
# 1332 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
int __attribute__((__cdecl__)) __mingw_str_wide_utf8 (const wchar_t * const wptr, char **mbptr, size_t * buflen);
# 1346 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
int __attribute__((__cdecl__)) __mingw_str_utf8_wide (const char *const mbptr, wchar_t ** wptr, size_t * buflen);
# 1355 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
void __attribute__((__cdecl__)) __mingw_str_free(void *ptr);
__attribute__ ((__dllimport__)) intptr_t __attribute__((__cdecl__)) _wspawnl(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
__attribute__ ((__dllimport__)) intptr_t __attribute__((__cdecl__)) _wspawnle(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
__attribute__ ((__dllimport__)) intptr_t __attribute__((__cdecl__)) _wspawnlp(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
__attribute__ ((__dllimport__)) intptr_t __attribute__((__cdecl__)) _wspawnlpe(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
__attribute__ ((__dllimport__)) intptr_t __attribute__((__cdecl__)) _wspawnv(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList);
__attribute__ ((__dllimport__)) intptr_t __attribute__((__cdecl__)) _wspawnve(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
__attribute__ ((__dllimport__)) intptr_t __attribute__((__cdecl__)) _wspawnvp(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList);
__attribute__ ((__dllimport__)) intptr_t __attribute__((__cdecl__)) _wspawnvpe(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
# 1385 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 3
__attribute__ ((__dllimport__)) intptr_t __attribute__((__cdecl__)) _spawnv(int _Mode,const char *_Filename,const char *const *_ArgList);
__attribute__ ((__dllimport__)) intptr_t __attribute__((__cdecl__)) _spawnve(int _Mode,const char *_Filename,const char *const *_ArgList,const char *const *_Env);
__attribute__ ((__dllimport__)) intptr_t __attribute__((__cdecl__)) _spawnvp(int _Mode,const char *_Filename,const char *const *_ArgList);
__attribute__ ((__dllimport__)) intptr_t __attribute__((__cdecl__)) _spawnvpe(int _Mode,const char *_Filename,const char *const *_ArgList,const char *const *_Env);
#pragma pack(pop)
# 1 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h" 1 3
# 9 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h" 3
# 1 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 1 3
# 10 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h" 2 3
# 28 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h" 3
__attribute__ ((__dllimport__)) errno_t __attribute__((__cdecl__)) clearerr_s(FILE *_File);
size_t __attribute__((__cdecl__)) fread_s(void *_DstBuf,size_t _DstSize,size_t _ElementSize,size_t _Count,FILE *_File);
# 471 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h" 3
int __attribute__((__cdecl__)) fprintf_s(FILE *_File,const char *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fscanf_s_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
int __attribute__((__cdecl__)) printf_s(const char *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _scanf_l(const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _scanf_s_l(const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snprintf_c(char *_DstBuf,size_t _MaxCount,const char *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsnprintf_c(char *_DstBuf,size_t _MaxCount,const char *_Format,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fscanf_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _sscanf_l(const char *_Src,const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _sscanf_s_l(const char *_Src,const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) sscanf_s(const char *_Src,const char *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snscanf_s(const char *_Src,size_t _MaxCount,const char *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snscanf_l(const char *_Src,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snscanf_s_l(const char *_Src,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
int __attribute__((__cdecl__)) vfprintf_s(FILE *_File,const char *_Format,va_list _ArgList);
int __attribute__((__cdecl__)) vprintf_s(const char *_Format,va_list _ArgList);
int __attribute__((__cdecl__)) vsnprintf_s(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsnprintf_s(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,va_list _ArgList);
__attribute__((dllimport)) int __attribute__((__cdecl__)) vsprintf_s(char *_DstBuf,size_t _Size,const char *_Format,va_list _ArgList);
__attribute__((dllimport)) int __attribute__((__cdecl__)) sprintf_s(char *_DstBuf,size_t _DstSize,const char *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snprintf_s(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fprintf_p(FILE *_File,const char *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _printf_p(const char *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _sprintf_p(char *_Dst,size_t _MaxCount,const char *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vfprintf_p(FILE *_File,const char *_Format,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vprintf_p(const char *_Format,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsprintf_p(char *_Dst,size_t _MaxCount,const char *_Format,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _scprintf_p(const char *_Format,...);
__attribute__((dllimport)) int __attribute__((__cdecl__)) _vscprintf_p(const char *_Format,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _printf_l(const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _printf_p_l(const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vprintf_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vprintf_p_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fprintf_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fprintf_p_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vfprintf_l(FILE *_File,const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vfprintf_p_l(FILE *_File,const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _sprintf_l(char *_DstBuf,const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _sprintf_p_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsprintf_l(char *_DstBuf,const char *_Format,_locale_t,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsprintf_p_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _scprintf_l(const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _scprintf_p_l(const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vscprintf_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vscprintf_p_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _printf_s_l(const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vprintf_s_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fprintf_s_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vfprintf_s_l(FILE *_File,const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _sprintf_s_l(char *_DstBuf,size_t _DstSize,const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsprintf_s_l(char *_DstBuf,size_t _DstSize,const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snprintf_s_l(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsnprintf_s_l(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snprintf_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snprintf_c_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsnprintf_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsnprintf_c_l(char *_DstBuf,size_t _MaxCount,const char *,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) errno_t __attribute__((__cdecl__)) fopen_s(FILE **_File,const char *_Filename,const char *_Mode);
__attribute__ ((__dllimport__)) errno_t __attribute__((__cdecl__)) freopen_s(FILE** _File, const char *_Filename, const char *_Mode, FILE *_Stream);
__attribute__ ((__dllimport__)) char* __attribute__((__cdecl__)) gets_s(char*,rsize_t);
__attribute__ ((__dllimport__)) errno_t __attribute__((__cdecl__)) tmpnam_s(char*,rsize_t);
__attribute__ ((__dllimport__)) wchar_t *__attribute__((__cdecl__)) _getws_s(wchar_t *_Str,size_t _SizeInWords);
# 739 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/sec_api/stdio_s.h" 3
int __attribute__((__cdecl__)) fwprintf_s(FILE *_File,const wchar_t *_Format,...);
int __attribute__((__cdecl__)) wprintf_s(const wchar_t *_Format,...);
int __attribute__((__cdecl__)) vfwprintf_s(FILE *_File,const wchar_t *_Format,va_list _ArgList);
int __attribute__((__cdecl__)) vwprintf_s(const wchar_t *_Format,va_list _ArgList);
int __attribute__((__cdecl__)) vswprintf_s(wchar_t *_Dst,size_t _SizeInWords,const wchar_t *_Format,va_list _ArgList);
int __attribute__((__cdecl__)) swprintf_s(wchar_t *_Dst,size_t _SizeInWords,const wchar_t *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsnwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const wchar_t *_Format,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const wchar_t *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _wprintf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fwprintf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vfwprintf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _swprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vswprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsnwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fwscanf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _swscanf_s_l(const wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) swscanf_s(const wchar_t *_Src,const wchar_t *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snwscanf_s(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snwscanf_s_l(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _wscanf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) errno_t __attribute__((__cdecl__)) _wfopen_s(FILE **_File,const wchar_t *_Filename,const wchar_t *_Mode);
__attribute__ ((__dllimport__)) errno_t __attribute__((__cdecl__)) _wfreopen_s(FILE **_File,const wchar_t *_Filename,const wchar_t *_Mode,FILE *_OldFile);
__attribute__ ((__dllimport__)) errno_t __attribute__((__cdecl__)) _wtmpnam_s(wchar_t *_DstBuf,size_t _SizeInWords);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fwprintf_p(FILE *_File,const wchar_t *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _wprintf_p(const wchar_t *_Format,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vfwprintf_p(FILE *_File,const wchar_t *_Format,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vwprintf_p(const wchar_t *_Format,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _swprintf_p(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,...);
__attribute__((dllimport)) int __attribute__((__cdecl__)) _vswprintf_p(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _scwprintf_p(const wchar_t *_Format,...);
__attribute__((dllimport)) int __attribute__((__cdecl__)) _vscwprintf_p(const wchar_t *_Format,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _wprintf_l(const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _wprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fwprintf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fwprintf_p_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vfwprintf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vfwprintf_p_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _swprintf_c_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _swprintf_p_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vswprintf_c_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vswprintf_p_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _scwprintf_l(const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _scwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vscwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snwprintf_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vsnwprintf_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) __swprintf_l(wchar_t *_Dest,const wchar_t *_Format,_locale_t _Plocinfo,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) __vswprintf_l(wchar_t *_Dest,const wchar_t *_Format,_locale_t _Plocinfo,va_list _Args);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _vscwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _fwscanf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _swscanf_l(const wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _snwscanf_l(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) int __attribute__((__cdecl__)) _wscanf_l(const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((__dllimport__)) size_t __attribute__((__cdecl__)) _fread_nolock_s(void *_DstBuf,size_t _DstSize,size_t _ElementSize,size_t _Count,FILE *_File);
# 1398 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 2 3
# 1 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/_mingw_print_pop.h" 1 3
# 1400 "C:/Program Files/mingw64/x86_64-w64-mingw32/include/stdio.h" 2 3
# 2 "hello.c" 2
# 3 "hello.c"
int main()
{
printf("hello, world\n");
return 0;
}
只是简单的“Hello World”程序预处理阶段头文件就插入了这么多内容,看来这个简单的程序并不简单。
*编译器的作用:将经过预处理的代码(*.i)翻译成包含汇编的文本(*.s);
.file "hello.c"
.text
.def __main; .scl 2; .type 32; .endef
.section .rdata,"dr"
.LC0:
.ascii "hello, world\0"
.text
.globl main
.def main; .scl 2; .type 32; .endef
.seh_proc main
main:
pushq %rbp
.seh_pushreg %rbp
movq %rsp, %rbp
.seh_setframe %rbp, 0
subq $32, %rsp
.seh_stackalloc 32
.seh_endprologue
call __main
leaq .LC0(%rip), %rcx
call puts
movl $0, %eax
addq $32, %rsp
popq %rbp
ret
.seh_endproc
.ident "GCC: (x86_64-win32-sjlj-rev0, Built by MinGW-W64 project) 8.1.0"
.def puts; .scl 2; .type 32; .endef
汇编语言??I am not very familiar哇~~~
据说任何高级语言都将转换成汇编语言,正如那句话“程序中的任何问题都可以通过增加一个中间乘来解决”基本上我见过代码写得烂的,都没有理解这个概念的。
*汇编器的作用:将汇编码转换为机械码(*.o);
机械码不是给人看的,这里就不贴出来了。在不同的平台所生成的机械码也是不同的。这时汇编码的作用就体现出来了。在多种机械码于多种高级语言间插入唯一的汇编码,通过唯一中间表示形式实现多对多的高效适配。
*连接器的作用:简单来说是将多个目标文件以及相关库文件中包含的机器码,通过符号解析、重定位等操作进行整合处理,最终生成一个可执行文件(Windows 中为 *.exe);
1.3、了解编译器系统如何工作是大有益处的(挖坑)
本节就是纯挖坑,看不看没有太大区别,不过可以作为学习成果检验。其中一共挖了17个坑,分别是:
*优化程序性能
1、一个switch语句是否总比一系列的if-else语句高效得多?
2、一个函数调用开销有多大?
3、while循环比for循环更有效率吗?
4、指针引用比数组索引更有效率吗?
5、为什么循环求和的结果放到一个本地变量中,会比将其放到一个通过引用传递过来的参数中,运行起来快得多?
6、为什么我们只是简单的重新排列一下算术表达式中的括号就能让函数运行得更快?
7、我们将介绍x86-64,最近近代Linux、Macintosh和Windows计算机的机械语言。以及编译器是怎么把不同的C语言结构翻译成这种机器语言的。
8、如何通过简单转换C语言代码,帮助编译器更好地完成工作,从而调整C程序的性能。
9、学习存储系统层次结构特性,C语言编译器如何将数组放到内存中,以及C程序又是如何能够利用这些知识从而更高效地运行。
*理解链接时出现的错误
10、连接器报错说它无法解析一个引用,这是什么意思?
11、静态变量和全局变量的区别时什么?
12、如果你在不同的C文件中定义了名字相同的两个变量会发生什么?
13、静态库和动态库的区别是什么?
14、我们在命令行上排列库的顺序有什么影响?
15、最严重的是,为什么有些链接错误直到运行时才会出现?
*避免安全漏洞
16、描述堆栈原理和缓冲区溢出错误。
17、学习程序员、编译器和操作系统可以用来降低攻击威胁的方法。
对于老板来说相当于白嫖17道面试题,对于求职者来说又多了17道题的竞争优势。
今天的胡扯就扯道这里,咱们明天再扯。(一定会有明天的~~)