C语言
奔跑的飞行兵
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
inet_pton函数和inet_ntop函数
family,AF_INET 或者 AF_INET6(如果以不被支持的地址族作为family的参数,这两个函数就都返回一个错误,并将errno置为EAFNOSUPPORT。地址的表达格式通常是ASCII字符串,数值格式则是存放到套接字地址结构中的二进制值。如果len太小,不足以容纳表达式结果(包括结尾的空字符),那么返回一个空指针,并置errno为ENOSPC。返回:若成功则为指向结果的指针(就是strptr值),若出错则为NULL。len:存放字符串的大小,防止溢出。addrptr,指向二进制结构体。原创 2023-08-23 08:17:56 · 872 阅读 · 0 评论 -
主机序与网络序转换
主机字节顺序(HBO,Host Byte Order): 不同的机器HBO不相同,与CPU设计有关,数据的顺序是由cpu决定的,而与操作系统无关。网络字节顺序(NBO,Network Byte Order): 按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。由于这个原因不同体系结构的机器之间无法通信,所以要转换成一种约定的数序,也就是网络字节顺序。计算机数据表示存在两种字节顺序:NBO与HBO。原创 2023-08-22 16:42:17 · 209 阅读 · 0 评论 -
使用LD_PRELOAD劫持rand()函数
ode),这通常是您如何构建共享库的方式。这会使代码被加载到随机地址空间中,并阻止其尝试对跳转或调用固定地址。rand()是一个libc函数,如果一个具有相同函数名的共享库被加载到二进制程序中,它将代替真实的函数。设置一个名为LD_PRELOAD的环境变量,并将其值设置为共享库的相对路径或共享库的绝对路径。此选项将二进制文件编译为“位置无关代码”(用于劫持的共享库:rand_hijiack.c。选项,它告诉gcc将其构建为共享库ELF。正常的业务代码:hello.c。原创 2023-08-22 16:41:59 · 109 阅读 · 0 评论 -
Makefile笔记
endef就好像使用变量一样。在这个命令包的使用中,命令包“run-yacc”中的“就是“fooy”,“^”就是“foo.y”, “就是fooy@”就是“foo.c”。原创 2023-08-22 16:33:02 · 95 阅读 · 0 评论 -
gcc编译步骤
如果库不存在的话,参数 -r 将创建一个新的,并将对象模块添加(如有必要,通过替换)到归档文件中。共享库是编译器以一种特殊的方式生成的对象文件的集合。对象文件模块中所有地址(变量引用或函数调用)都是相对而不是绝对的,这使得共享模块可以在程序的运行过程中被动态地调用和执行。程序 main 已经完成,但要运行它必须让其能定位到共享库 hello.so,因为库中的函数要在程序运行时被加载。静态库是编译器生成的普通的 .o 文件的集合。链接一个程序时用库中的对象文件还是目录中的对象文件都是一样的。原创 2023-08-17 08:38:13 · 292 阅读 · 1 评论 -
C语言-预处理器
4142重复定义同名宏,编译会警告。要想重新定义宏,需要取消已定义的宏。\n")\n")\n")printf\n")b\n")\n")__DATE__,当前日期,一个以 “MMM DD YYYY” 格式表示的字符常量。__TIME__,当前时间,一个以 “HH:MM:SS” 格式表示的字符常量。__FILE__,当前文件名,一个字符串常量。__LINE__,当前行号,一个十进制常量。__STDC__,当编译器以 ANSI 标准编译时,则定义为 1。原创 2023-08-17 08:34:36 · 134 阅读 · 1 评论 -
C语言-头文件
如果一个头文件被引用两次,编译器会处理两次头文件的内容,这将产生错误。有时需要从多个不同的头文件中选择一个引用到程序中。例如,需要指定在不同的操作系统上使用的配置参数。但是如果头文件比较多的时候,这么做是很不妥当的,预处理器使用宏来定义头文件的名称。就可以实现所有头文件的包含,同时不会乱。方便在各个文件里面调用其他文件的函数或者变量。写在头文件中,在需要的时候随时引用这些头文件。引用头文件相当于复制头文件的内容。文件的时候,往往我们会用一个。文件外的头文件中 包含。的头文件来包括所有的。原创 2023-08-17 08:33:09 · 2136 阅读 · 1 评论 -
C语言-内联汇编
2、“r”(a)指示编译器分配一个寄存器保存变量a的值,作为汇编指令的输入,也就是指令中的%1(b对应%0,a对应%1),至于%1究竟代表哪个寄存器则由编译器自己决定。5、在执行指令的过程中,寄存器eax的值被改变了,所以把"eax"写在第四部分,告诉编译器在执行指令期间不要用eax保存其他值。3、%%eax(为了和%1这种占位符区分,eax前面要求加两个%号)。4、“=r”(b)表示把%0所代表的寄存器的值输出给变量b。第四部分,指示在汇编指令中被修改过的寄存器列表。1、该汇编代码将变量a的值赋给b。原创 2023-08-17 08:32:08 · 323 阅读 · 1 评论 -
C语言-整型
但事实上u、l、ll这几种后缀和unsigned、long、long long不是一一对应的。ILP32缩写的意思是int、long和指针类型都占32位。LP64缩写的意思是long、指针类型占64位。原创 2023-08-17 08:31:14 · 211 阅读 · 1 评论 -
C语言-可变参数
【代码】C语言-可变参数。原创 2023-08-17 08:30:20 · 112 阅读 · 1 评论 -
C语言-函数
在定义函数的文件内,可省略函数声明(因为函数定义时,相当于声明了函数)。/* 函数返回两个数中较大的那个数 *//* 局部变量声明 */int result;else。原创 2023-08-17 08:28:32 · 430 阅读 · 1 评论 -
C语言-基础知识
函数,对于函数也一样,也是定义和声明,定义的时候用extern,说明这个函数是可以被外部引用的,声明的时候用extern说明这是一个声明。但由于函数的定义和声明是有区别的,定义函数要有函数体,声明函数没有函数体(还有以分号结尾),所以函数定义和声明时都可以将extern省略掉,反正其他文件也是知道这个函数是在其他地方定义的,所以不加extern也行。首先 static 的最主要功能是隐藏,其次因为 static 变量存放在静态存储区,所以它具备持久性和默认值0。指针常量:指针是常量。常量指针:常量的指针。原创 2023-08-17 08:27:08 · 95 阅读 · 1 评论 -
C语言指针运算
通过一道题目,来理解C语言指针运算规则。原创 2023-04-11 14:24:17 · 183 阅读 · 0 评论
分享