C
文章平均质量分 60
c语言
、moddemod
这个作者很懒,什么都没留下…
展开
-
计算机等级考试二级C语言考试环境VS2010学习版以及免费题库
写在前面的话因为对象需要,找了一下资料,这里分享给有需要的小伙伴,资源来源于网络,侵删!计算机等级考试二级C语言考试大纲http://ncre.neea.edu.cn/html1/report/20122/1392-1.htm因为考纲内使用的环境是Microsoft Visual C++ 2010 学习版Microsoft Visual C++ 2010 学习版 安装:下载链接:推荐用迅雷下载:(直接复制即可下载)ed2k://|file|cn_visual_studio_2010_e原创 2021-02-01 12:05:46 · 7393 阅读 · 6 评论 -
C语言不定参数
C语言不定参数主要使用下面几个宏。实现本质为一个arg_ptr的指针移动,其实也很容易理解,参数再多,也就是在栈上,数据类型确定其数据长度的,移动指针即可一依次取出参数。type va_arg( va_list arg_ptr, type);void va_copy( va_list dest, va_list src); // (ISO C99 and later)void va_end( va_list arg_ptr);void va_start( v原创 2020-08-20 10:17:54 · 823 阅读 · 0 评论 -
学了C语言ANSI C、GNU C、ISO、ANSI、GNU你都了解吗?
学了C语言,你都了解ANSI C、GNU C、ISO、ANSI、GNU你都了解吗?ISOISO(International Organization for Standardization,国际标准化组织)ANSIANSI(American National Standards Institute,美国国家标准协会)ANSI C也就是美国国家标准协会发布的C语言的标准,因为这个东西本来就是人家创建的,所以他说的就是标准,就是这么简单。下面说的各个C语言的发布版本都是C语言的标准,只是版本的更迭。原创 2020-08-18 22:12:26 · 1169 阅读 · 0 评论 -
关于“一个字等于多少字节?“的问题解答
网上有人说这个问法不严谨,我觉得严格说确实是这样,但是我个人觉得不能这样说!举个例子,这个问题就好比你上初中的时候那些证明题很多其实是很不严谨的,但是限于知识体系,到高中你会发现好像不是那么一回事,到了大学你又会发现另外新的东西!但是你能回去说初中老师教的都是错的吗?我觉得不能吧!只能说你看待问题的角度以及一个系统的宏观视角的更深入了,看待问题更明白了!回到这个问题,一个字等于多少字节?首先一个字节等于八位这是毋庸置疑的,因为存储系统逻辑地址的编址便是以字节为单位进行编址的,计算机运算二进制这是人所共原创 2020-08-11 18:04:54 · 2722 阅读 · 2 评论 -
动态链接
在静态链接时,整个程序最终只有一个可执行文件,它是一个不可分割的整体,但是在动态链接下,一个程序被分成若干个文件,有程序的主要部分,即可执行文件和程序所依赖的共享对象,很多时候我们也把这块称为模块,即动态链接下的可执行文件和共享对象都可以看作是程序性的一个模块!对于静态链接的可执行文件来说,整个进程只有一个文件要被映射,就是可执行文件本身;而对于动态链接来说,除了可执行文件本身,还有他所依赖的模块,所以在虚拟地址空间中,就不止是一个文件被映射,通常是多个文件。这里不仅包含了Lib.so,还包含了C.原创 2020-06-08 17:21:37 · 307 阅读 · 0 评论 -
PLT延迟绑定技术
动态链接的链接工作在运行时完成,即程序开始执行时,动态链接器要先进行一次链接工作。由于程序模块之间包含了大量的函数引用,所以在程序开始执行之前,动态链接会耗费不少时间用于解决模块之间的函数引用的符号查找以及重定位。由于程序的局部性原理,在一个程序的运行的过程中,往往不是所有的函数都能用到,相反在大量的符号中,只有少部分会用到,所以如果在程序一开始的时候就把所有的函数都链接好然而最后又没有用到,这很明显是一种浪费,所以就出现的延迟绑定的概念。基本思想就是:函数不是程序运行之前就全部进行链接工作,而是在用原创 2020-05-31 20:20:39 · 658 阅读 · 0 评论 -
Visual studio 201X中编译器配置
笔者的测试环境是vs2017,我们先来看一下Release和Debug的这两种配置方案有啥区别很明显区别都是优化和调试方面的区别。顾名思义,Debug主要是为我们在编写程序的时候便于调试程序而配置的方案,而Release主要是为程序发布使用的方案,发布版主要是为用户体验,所以着重于代码的质量以及运行效率等等因为该IDE集成的是MSVC,MSVC是微软Windows平台Visual Studio自带的C/C++编译器,上面一连串的参数即是cl命令的参数选项.我们再来看一下两个方案下编译出的可执行原创 2020-03-09 17:49:33 · 979 阅读 · 0 评论 -
静态链接
静态链接对于链接器来说,整个链接的过程就是将几个输入的目标文件加工后合并成功一个输出文件。第一个问题就是:对于多个输入目标文件,链接器如何将它们的各个段合并到输出文件?答案是将相同性质的段合并到一起,比如将所有输入文件的.text合并到输出文件的.text段,接着是.data段,.bss段等.bss段在目标文件和可执行文件中并不占用文件的空间,但是它在装载时占用地址空间。所以链接器在合...原创 2020-03-08 20:22:15 · 205 阅读 · 0 评论 -
为什么要进行动态链接
为什么要进行动态链接静态链接使得不同的程序开发者能够相对独立地开发和测试自己的程序和模块,从某种意义上来讲大大促进了程序开发的效率,但是慢慢静态链接的诸多缺点就暴露出来,比如浪费内存和磁盘空间、模块更新困难等等空间浪费特别是在多进程操作系统情况下,静态链接极大地浪费内存空间,想象一下每个程序内部都保留着printf、scanf等等这样的公用库函数,还有更多的其他库函数。在现在的Linux系统...原创 2020-03-07 23:03:51 · 545 阅读 · 0 评论 -
Makefile
什么是Make简而言之,可以将Make理解为一种脚本,这种脚本主要用于多文件编译。在传统的命令行编译方式中,如果修改了工程中的某一个头文件,有时候不需要重新编译整个工程,而只需要编译与这个头文件相关联的源文件即可,但如何以手动的凡是从一个大工程中将这些文件找出,并手动编译,是一个很大的问题。为了解决这个问题,设计了Make,Make程序可以维护具有相互依赖的源文件,当某些文件发生改变时,它能自...原创 2020-03-07 12:23:07 · 247 阅读 · 0 评论 -
MSVC命令行环境配置
MSVC是微软Windows平台Visual Studio自带的C/C++编译器,但是这个IDE比较庞大,有时候我们写一个小程序没有必要去启动IDE,所以可以配置一下MSVC编译器,这样我们就可以通过命令行的方式或者其他一些轻量的工具接入MSVC编译器。笔者演示机器为Visual Studio 2017,2019也是一样的。在Visual Studio 2017的安装目录下Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build存在几个脚本bat原创 2020-03-06 18:45:12 · 3080 阅读 · 8 评论 -
MinGW
MinGWMingW(Minimalist GNU on Windows)是一个Linux/Windows下的可以把软件源码中Unix-like OS API调用通过头文件翻译替换成相应的Windows API调用的编译环境,从而把Linux上的软件在不修改源码的情况下编译为可直接在Win下的可执行文件.MinGW提供了一个完整的开源编程工具集,该工具集适用于MS-Windows应用程序的开发,并且不依赖于任何第三方C-Runtime DLLMinGW包括:GNU编译器集合(GCC),包括C,原创 2020-02-02 10:14:38 · 1142 阅读 · 0 评论 -
结构&联合&枚举
结构结构就是一种把数据项组合在一起的数据结构,在c语言中,进行组合的通常方法就是把需要组合的东西放在花括号里:{内容...}关键字struct放在左花括号前面,以便编译器能够从程序块中认出它:struct { ... };结构的内容可以是任何其他数组声明:单个数据项、数组、其他结构、指针等。我们可以在结构的定义后面跟一些变量名,表示这些变量的类型是这个结构的。另外可以在struct关键字...原创 2020-03-04 19:30:52 · 292 阅读 · 0 评论 -
void与null
voidvoid一般用在两种情况下。第一种情况是,如果函数没有返回值或参数,那么应该声明为void,不同的编译器会对省略的定义有所不同的解释,这种显示的定义明显可以提高程序的平台移植性。例如下面定义了一个没有传入参数、没有返回值的一个函数void func(void)。如果返回值得类型不用void指定,有的编译器会默认返回得是一个int类型,这样就会造成一些潜在得移植错误。第二种使用void得...原创 2020-03-04 18:58:27 · 475 阅读 · 0 评论 -
反汇编分析之函数调用
反汇编分析一个简单的c语言程序,主要是理解一下函数调用堆栈空间的分配// test.cint g(int x){ return x + 3;}int f(int x){ return g(x);}int main(void){ return f(8) + 1;}汇编后得到AT&T格式的汇编代码gcc -m32 -S -o test.s...原创 2020-03-01 21:26:18 · 532 阅读 · 0 评论 -
malloc使用的系统调用
malloc调用brk或mmap系统调用来获得内存下面是我的测试环境在我的测试环境下,系统默认开辟了132字节大小的堆和栈空间文章参考https://sploitfun.wordpress.com/2015/02/11/syscalls-used-by-malloc/这篇文章,但是笔者在自己的环境发现了有很多不一样的地方,这就是技术的更新迭代吧!多学习!...原创 2020-03-01 17:18:58 · 1127 阅读 · 0 评论 -
Linux下新版本gcc生成的Shared object file而不是executable file
这里先说一下原因是gcc新版本的默认配置导致了我们一直编译后就是共享目标文件了。这里要谈到PIE(Position-Independent-Executable),这是Linux程序的一种保护机制,是gcc的一个功能选项,目的是为了让程序能在任意地址装载,减少了系统攻击的风险。我们发现默认生成的是Shared object file,而不是Executable file这是因为新版的gc...原创 2020-02-28 18:09:43 · 4528 阅读 · 3 评论