阐述: C语言研究中心是一个非官方的由C语言爱好者组成的一个技术交流组织,进行有组织、有计划的学习、交流和推广工作。并提倡在日新月异的互联网时代下可以饮水思源,让C语言深入人心!
目标:
现行目标:提高团队间C语言的整体水平,深入学习和研究C语言那些不常用、不好理解、不广为人知的技术细节,并对外公布学习研究成果。
长……继续阅读 »
CTO
8年前 (2016-12-31) 9523浏览 5评论
32个赞
想必大家都知道C语言中动态开辟内存之后,必须要释放内存,来防止内存泄露。也就是malloc之后,必须要free。正所谓”有借有还,再借不难”, 不少同学会问为什么释放指针后,指向这块内存的指针的值不变呢,我们今天为大家揭秘。
首先,我们用malloc开辟一个内存,用strcpy拷贝一串字符串,然后释放掉,通过断点调试进行观察!
下图可以看到,在……继续阅读 »
CTO
8年前 (2016-12-27) 20092浏览 3评论
35个赞
请看下面三种定义:
const char *p;
char const *p;
char * const p;
请问,三者有什么区别呢?
笔者在之前好多家笔试题种都看到这样的问题,今天想起又拿出重新梳理一下,便于后人学习。
首先看第一种,我们先看p,本着”从里往外”的原则,p是一个char *类型的变量,但char ……继续阅读 »
CTO
8年前 (2016-12-25) 17232浏览 1评论
29个赞
请先看一到程序:
程序试图给长度为10的字符串str拷贝超过10个长度的字符串,不少初学者可能忘记了数组开辟的长度或是没有意识到越界的问题引发这样的错误写法,可能更令新人诧异的是,这样的写的程序竟然编译器不报错,并且运行也不报错! 大家可以自行尝试运行这个程序,不仅编译没有问题,运行也看起来一切“正常”!
这就是一个典型的数组越界引发的问题,如果大家细……继续阅读 »
CTO
8年前 (2016-12-21) 19546浏览 7评论
79个赞
为什么要用”真正”这个词?因为我们从学C语言开始,都会先明白这个道理,即C语言有且仅有一个main函数,main函数是C语言的入口点和出口点!(可以参考<<一个C语言程序的基本机构>>)不光C语言如此,C++也如此,甚至无论黑窗口的控制台程序和Windows应用程序,都是从main函数或者WinMain函数开始执行,这当……继续阅读 »
CTO
8年前 (2016-12-17) 20839浏览 6评论
56个赞
通过前面的介绍,大家已经会了数据断点、条件断点,今天我们再给大家加一个内存断点,更有意思哦。
顾名思义,内存断点就是在一个地址处下断点,这个地址只要有读写就断住,就这么简单。那么下来我们给大家演示一下,先看一个程序:
怎么样?简单吧,交换两个数字的程序
这个时候比方我想看a变量地址出的改变情况,就可以用内存断点来下断点,我们先查看&a……继续阅读 »
CTO
8年前 (2016-12-10) 11605浏览 1评论
28个赞
在前几讲中,在讲解了断点的基本用法后,给大家介绍了简单的关于变量监视的技术,包括运行中的局部变量监视,也打开了编译器监视的一小扇门,今天将为大家讲解更全面的窗口监视。如下:
1.内存监视
除了我们之前讲的可以监视程序中的局部变量以外,我们还可以监视其他想要的信息,比如数组中某一元素的值,特定地址处的值等等。比如我们在学习字符串函数strcoy时,很多同学不明……继续阅读 »
CTO
8年前 (2016-12-08) 20615浏览 3评论
36个赞
前言
今天起,为增加大家学习C语言的趣味性、更深层次的学习C语言、学习更实用的编程技术,我们今后将陆续开设逆向方向的教程专题,希望大家喜欢!
C语言研究中心(www.dotcpp.com)
以下正文
本节教程将教大家如何去逆向分析和破解一个简单的C程序,需要大家熟悉基本的C语言语法,用到工具有:VC6、IDAPro、OD、UE等工具。
下面我们……继续阅读 »
CTO
8年前 (2016-12-06) 28540浏览 6评论
46个赞
在写程序调试过程中,除了我们之前讲的任意行下断点以外,由于程序实际执行的复杂性,处于便捷和更加精准的需求,VC为我们还提供了条件断点,即满足某一条件时才触发断点。
举一个具体场景,比如当程序进行循环等大量运算时,如果单步调试显然会相当费事,而条件断点就可以很好解决这个问题。
来一个具体的程序例子:打印九九乘法表程序,代码如下:
比如我们想在打印8*9=……继续阅读 »
CTO
8年前 (2016-12-03) 14871浏览 2评论
28个赞
上两讲中,为大家介绍到了VC6编译器的断点调试技巧,教给大家如何设置\取消断点、单步和跟踪一个程序。让大家具备基本的调试一个程序的能力。今天我们将继续深入研究教大家如何更细致、深入的跟踪和分析一个C程序。
下面进入正文,对于一个有“问题”待分析的程序,我们断点的目的是为了追溯程序的执行过程,跟踪程序的动态执行过程,从而排查错误来解决问题。所以实……继续阅读 »
CTO
8年前 (2016-11-30) 16776浏览 2评论
41个赞