VC++黑客编程:如何获得IP地址和主机名
今天阿驹电脑安全就给大家粗浅地说一下如何用VC++编程获取IP以及主机名。首先告诉大家,可以通过gethostname()和gethostbyname()函数来获取计算机的主机名和IP地址。两个函数的语法格式如下:gethostname()int gethostname(char FAR * name, int namelen);name:表示返回主机名。namelen:表示字符串name的大小。获取IP地址的代码char computername[128];CString str;if(gethsotname(computername,128) == 0) //获得主机名{ struct hostent * phost; int i=0, j, h_len=4; phost = gethostbyname(computername); m_hostname = computername; for( j=0, j0) str+=”.”; m_addr.Format(“%u”, (unsigned int)((unsigned char*)-h_addr_list[i][j] )); str+=m_addr; }}m_ipaddress = str;UpdataData(FALSE);
vc++是什么
�0�2�0�2�0�2 这个问题很奇怪吗?大概是。不过,当我又看到有人发表诸如“Windows/Office是VC编写的”或者“VC是无所不能的”这种高论,我就禁不住这样问自己。�0�2�0�2�0�2 Visual C++究竟是什么?你平常在其中工作的那个标记着“Microsoft Visual C++”的窗口,真的就代表Visual C++吗?�0�2�0�2�0�2 按照我的理解,Visual C++是一个开发工具包,它大概可以分成三个主要的部分:1. Developer Studio,这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“Microsoft Visual C++”,所以很多人理所当然的认为,那就是Visual C++了。其实不然,虽然Developer Studio提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。我们也知道,Developer Studio并不是专门用于VC的,它也同样用于VB,VJ,VID等Visual Studio家族的其他同胞兄弟。所以不要把Developer Studio当成Visual C++, 它充其量只是Visual C++的一个壳子而已。这一点请切记!2. MFC。从理论上来讲,MFC也不是专用于Visual C++,Borland C++,C++Builder和Symantec C++同样可以处理MFC。同时,用Visual C++编写代码也并不意味着一定要用MFC,只要愿意,用Visual C++来编写SDK程序,或者使用STL,ATL,一样没有限制。不过,Visual C++本来就是为MFC打造的,Visual C++中的许多特征和语言扩展也是为MFC而设计的,所以用Visual C++而不用MFC就等于抛弃了Visual C++中很大的一部分功能。但是,Visual C++也不等于MFC。3. Platform SDK。这才是Visual C++和整个Visual Studio的精华和灵魂,虽然我们很少能直接接触到它。大致说来,Platform SDK是以Microsoft C/C++编译器为核心(不是Visual C++,看清楚了),配合MASM,辅以其他一些工具和文档资料。上面说到Developer Studio没有编译程序的功能,那么这项工作是由谁来完成的呢?是CL,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成Visual Studio的基石。�0�2�0�2�0�2 为什么我会觉得“Windows是用VC开发的”这种说法很奇怪?因为它太含糊了。用VC,可以编写MFC应用,也可以编写纯SDK程序,不论哪一种方式,都不一定是非VC不可。只要乐意,我完全可以用UltraEdit来写出一个MFC程序,再用CL编译之,没有必要一定动用VC这个大家伙。而且有许多黑客和买不起Visual Studio的人就是这么干的!用SDK编程就更不需要VC了,Down一个Borlan C++ Compiler下来,或者用lcc之类的编译器,同样可以达到目的。再说了,Windows可不是一个单纯的产品。用VC来编写Windows外围程序是完全不成问题的,可是操作系统的核心部分呢?就算可以用VC来编写代码,调试怎么办?VC自身的调试器对一般的应用功能是够强大的,可是对于系统级的调试根本无能为力,因为这个调试器本身就是依赖于操作系统的。只有系统级的调试程序如debug,SoftIce和Wdebug这些工具才能完成如此重大的任务。�0�2�0�2�0�2 从历史上来看,Visual C++ 1.0的出现晚于Windows 3.0,而且那时候的MFC只有一个雏形而已,用来开发操作系统根本是不可能的事情。在Visual C++ 1.0的前面倒是有一个Microsoft C/C++ 7.0,但是它整体水平不如Borland C++ 3.1,在扩展内存管理方面的功能又不如Watcom C++ ,所以一直没有占据很大的市场。它现在已经不作为单独的产品,但仍然作为Platform SDK的主要组成部分而存在于Visual Studio产品中,而且其功能比过去也不可同日而语了。到Windows 95问世的时候,MFC仍然在尽力追赶操作系统的功能。应该说Visual C++ 5.0是一个转折点,一方面MFC已经发展比较完善,另一方面,操作系统的基本结构也已经稳定,后面就主要着眼于系统整合与完善作为商务平台的功能。已经稳定的系统不可能再进行翻天覆地的修改,所以,我比较能够接受“Windows系统是用Microsoft C++和MASM作为编译器完成的”这种说法。研究Windows的系统文件可以看出,很多文件显示出来的Linker Version明显是Microsoft C++编译器。至于代码是用什么编写的?我不知道,也不想知道,除了Developer Studio的编辑器之外,任何好的文本编辑器都能够做到这一点。�0�2�0�2�0�2 Visual C++是无所不能的吗?唔,最好也是分开来说。Developer Studio肯定不是—它只是个外壳而已。MFC呢?也不是。一方面它是对API的封装,离开了API它就什么也干不了;另一方面,MFC对API的封装也不够全面,有些时候还是要直接调用API函数才能够“为所欲为”。至于Platform SDK,倒真的可以说它几乎是无所不能的。不过,过分强调这一点并没有太大意义。只要有一套完整的编译器,和必须的支持文件,其他开发工具也可以说是“无所不能”的,比如Borland C++ Compiler或者lcc都可。�0�2�0�2�0�2 老实说,我并不喜欢“无所不能”这类字眼。关键在于各人的理解不同。如果我较起真来,说能不能写个VC程序让电脑拿起鼠标砸向我不喜欢的老板,你说它能办得到吗?所谓的“无所不能”究竟有何意义?让我用VC写一个Server,能在普通工作站上支持每秒几千万的访问量,杀了我也办不到,不管VC的优化手段是多么有效。在具体的平台上,在特定的操作系统中,不论多么强大的工具,最终还是要受到平台和系统本身的限制。大家应该知道这个悖论吧:上帝能否制造出一块他自己也举不起来的石头?�0�2�0�2�0�2 我也常常看到“MFC永远不会过时”或者“C++是不会灭亡的”这种发言。我理解发言人的心情,不过这种说法绝不客观。一种语言也好,一个Application Framework也罢,它们之所以有今天的地位,并不是纯粹自然形成的,有许多复杂因素的作用,也有时势造英雄的理由在内,所谓“居高声自远,非是籍秋风”是也。历史的舞台从来不是为某人专设,即使真有所谓万古长青的怪胎,恐怕也正应了那句老话:“众人都死了,只剩咱们两个老妖精,有什么意思!”我们现在使用的语言,不论Basic,Pascal还是C++,甚至如日中天的Java和C#,终究都会有功成身退的一天。这并不是我们的损失,相反,薪尽火传,一种语言中好的,合理的因素,肯定会被后续者所继承和发扬,自然界的新陈代谢本该如此。�0�2�0�2�0�2 天空没有飞翔的痕迹,而飞鸟已经飞过。一种语言只要曾经在历史上留下浓墨重彩的一笔,完成它“为先贤继圣学,为万世开太平”的历史使命(有点夸张),这就够了,何必缠绵不舍作儿女之态!不知道我有生之年会不会看到C++的消亡,如果真有这么一天,我会拍手欢呼,因为这说明已经有了另外一种更新更好的语言来代替它(或许是几种)。不过照我猜想,像C++这种轰动武林惊万教的语言,其灭亡恐怕也不会是悄无声息,而多半属于“始皇既没,余威震于殊俗”那种情况。�0�2�0�2�0�2 最后请允许我发表一点感慨。语言的优劣其实是一个无需讨论的问题,个人的经历和所处环境在很大程度上就决定了你对某种语言的看法,这是很个人的东西。好比碰到一位法国朋友,他多半会自豪的告诉你:法语是世界上最好最优美的语言。对这种说法我会微笑表示赞同,并且欣赏他的民族自豪感,而不会觉得这是对汉语或者英语的贬低—虽然我心底里一直深信,汉语才是世界上最好的语言。当然,如果他对我说“你们那些破烂中文是些什么玩意”,那我可能就是另外一种反应了。说了这么多,意思无非是想少些无谓的争论罢了。常在论坛上看到“XXX是最好的语言(编译器),XX是什么东西”之类发言。我不想和他们争论,一个人对一样东西既然完全失去了接触和了解的兴趣,那么说什么大概都没有用了。只是觉得遗憾而已。人世间的隔膜与误会,大多是由于彼此不了解而引起,而多少悲剧正是由此而发生呵。在编程的世界里大概不会这么严重,不过言为心声,多少也可看出个人的品行。如果某个人A常在我面前说B的坏话,那么我对B不会有恶感,相反我对A的印象分要减去20。自己不了解的人或者事,不管,不说,也就是了。何至于恶言相加呢。我参加工作的时间不长,各种各样的软件工程师倒是见过不少。就我看到的情况,程序员实在是很沉默寡言的一类人,平时总是表现的温文尔雅,有时候却难得的能见到他们大发脾气,扔鼠标,砸键盘,捶显示器,干什么的都有(这种情况多半是遇到没有办法除掉的Bug了)。面对亲人和朋友的时候他们有时候会选择长久的沉默,只有坐到机器前面时才会发现他们的痴迷和狂热。虽然普遍的不善言谈,但是他们似乎总能在游戏或者网络中找到发泄的方式。所以我在各种各样的论坛上看到语法错误不忍卒读的文字,看到互相指责乃至于人身攻击的情况,甚至看到许多不雅的词汇,虽然心情无论如何愉快不起来,但是我想我能理解。只是,我仍然感到担心,毕竟程序员这一行干几年就了不起了,而人生还有很长的路要走呢。没有一个健全的心态,没有足够为人处世的技巧,30岁以后的人生该如何把握呢?
黑客分为哪几个等级
黑客的等级可以用下面7个层次来说明:
Level 1——愣头青【百万人】:会使用安全工具,只能简单扫描、破译密码
Level 2——系统管理员【上万人】:善用安全工具,特别熟悉系统及网络
Level 3——大公司的开发人员或核心安全公司大牛【几千人】:对操作系统特别熟悉,开始开发代码,写自己的扫描器
Level 4——能找到并利用漏洞【几百人】:自己能找漏洞、自己找0day并且写exp利用漏洞的;对系统做挖掘漏洞的协议测试
Level 5——高水平【少于百人】:防御和构建系统的人
Level 6——精英级【几十人到十几人】:对操作系统的理解很深入
Level 7——大牛牛【寥寥无几】:马克·扎克伯格、艾伯特·爱因斯坦等改变世界的人
黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。
2012年电影频道节目中心出品的电影《骇客(Hacker) 》也已经开始使用骇客一词,显示出中文使用习惯的趋同。
实际上,黑客(或骇客)与英文原文Hacker、Cracker等含义不能够达到完全对译,这是中英文语言词汇各自发展中形成的差异。
Hacker一词,最初曾指热心于计算机技术、水平高超的电脑专家,尤其是程序设计人员,逐渐区分为白帽、灰帽、黑帽等,其中黑帽(black hat)实际就是cracker。
在媒体报道中,黑客一词常指那些软件骇客(software cracker),而与黑客(黑帽子)相对的则是白帽子。
黑客级别分为几级?
小小黑:大部分初学者的级别,处于知识积累的阶段,懂得一定的编程知识,至少会编一些傻瓜程序。对黑客入侵流程有所了解,懂得使用一些扫描器,看过一定量教程,但没有成功入侵过一次。。
小黑:标志是成功入侵过网站,并全身而退(就是没被发现)熟悉vb,vc,网页编程等等
黑客:标志是入侵过中等网站并全身而退,有大量的入侵小站的经验。对编程精通,可以随心所欲的编出想要的程序,达到高级程序员水准,会制作asp php html 等等网页。
黑侠:标志是入侵过大型网站并全身而退,熟悉并精通各种编程
,所制作的程序,网页无不是专业水准》
黑尊:入侵美国国防部等世界大网,站在黑客技术的前沿,独孤求败。。。。。。。。。。。。。。。。。。。。。
学C++和VC如何入门,如何提高?
给软件开发初学者
在论坛上呆久了,发现很大一部分有关开发的帖子都是有关心怀梦想,立志成为一个软件英雄或者响当当的黑客人物;或者是狂热的游戏玩家,突然想迈入游戏开发的殿堂,自己打造一个完美的游戏;或者被以前IT行业的“钱”途无量所吸引,为了经济因素希望成为一个程序员的,而寻求进入软件开发领域之门的求助帖子。
这些诸如“你好,我想做程序员,应该怎么做?”,“初学C++,请问看什么书好”,“请高手帮我看看这个程序”,“我想转行,请高手指点”……的帖子占了各大软件开发论坛帖子总量的很大一部分,而且内容是长年不变,重复来重复去 :P
自从做了epubcn的C++板块的版主,经常收到不相识网友的消息或Email,基本上还是问这些问题。看到这些帖子和Email,不禁想起自己刚刚迈入软件开发的领域,茫茫然不知何去何从,兴奋而又彷徨不安的过去,这样的经历一次又一次,在不同的地点、不同的时间仍然在不断的重复。今天终于坐下来,写下一点文字,希望能够对彷徨的朋友们有点帮助。
确认你真的要迈入软件开发领域
软件开发是一项纯智力活动(现在人们都意识到长时间超负荷的连续写程序并不会提高软件生产率,反而会对软件品质造成很大负面影响,所以尽管很多程序员仍然长时间加班,但这种现象正在逐步减少并最终会消失,所以体力要求并不会比其他行业高),如果你不是一个智力高于平均水平的人,说实话,软件开发并不适合你,你基本不可能在软件开发领域取得很高的成就和地位,而且不久就会因为年龄的增长而被淘汰。
如果你以那些开发出共享软件的软件英雄和著名黑客为榜样,立志也要成为他们的一员,像武侠小说中的大侠一样仗剑江湖。我要先给你泼上大大一盆冷水,把你从幻想拉到现实中来。首先,现在的软件其复杂度和规模都远远超过以前,想一个人独力完成一个规模稍大的软件,基本没有可能(虽然还是有些特例,but trust me,那些仅仅是特例,请不要把自己想像成独一无二的超人、幸运儿);其次,无论是软件英雄还是仗剑江湖的顶尖黑客,他们的软件开发功底和智力都远远超过软件行业从业者的平均水平,没有多年的积累和坚韧超常人的毅力,是不可能,换句话说,想成为他们的一员,可以,但请首先成为一个合格的软件开发人员。
如果你是因为传说中程序员的所谓“高薪”,对自己现在从事的工作不满意,而萌生转行的念头,我劝你还是再慎重考虑一下。程序员的待遇一般来说,是要比平均水平高一些,但远远谈不上高薪,而且以现在程序员的工作量来算,其实同样的付出,程序员所得到的能和平均水平看齐就不错了,程序员的竞争和淘汰也是异常残酷的。技术的更新速度更是其他行业所罕见,每个程序员都要不停的跑步跟上,不使自己落伍,所以在这个层面上来说,没有谁可以停下来休息,唯一能够积累下来的就是你的经验,但经验中能够为你的竞争力增添筹码的并不多。
说了这么多,并不是我故意贬低,而是希望告诉你我所知道的软件开发行业的真实情况,基于此请再慎重考虑你是不是真的要迈入软件开发领域。
检验一下你是否适合当个程序员
在我看来,要做一个合格的程序员,你需要具备下面几个条件:
1. 强烈的好奇心和求知欲
2. 追求完美的精神
3. 良好的逻辑分析能力
其他方面的条件几乎所有类似的帖子都有提及:如果你不是准备单打独斗,那么团队合作能力必不可少;英语我就懒得说了,没有基本的阅读英文资料的能力,我劝你还是打消做个程序员的想法,没有为什么;数学能力也是必不可少的,如果不是做算法,高中水平的数学能力就足够了,但一定要成绩很好才行。
那么为什么我要强调上面列的三点呢?
具有强烈的好奇心和求知欲,能够让你跟上技术发展的步伐,仅仅靠危机感和责任感,你对技术的学习会有很强的功利性质,导致你的技术体系不能构成一个完整自包容的整体,而且很难对技术有高层次的认识和掌握。
我认识的一个资深系统设计师跟我说过:做软件,“做出来”和“做的好”完全是两个概念,所要求的投入和技术水平是天壤之别。现在国内很多程序员仅仅把软件开发当作养家糊口的谋生手段,国内计划经济时代凑合、马马虎虎干活的思想也渗透到了软件业,很多程序员仅仅是把功能做出来,根本不会去考虑提高重用性、可维护性,也不会去考虑提高稳定性、运行速度,甚至连代码也是乱七八糟,基本的编码规范都不遵守(在我看来,这样的人不配“程序员”这个称号),在我们大声谴责国内软件业环境不好,拉项目靠关系,没有质量保证体系,老板不重视程序员,疯狂剥削程序员的时候,我们是不是该问问自己,你是不是只把眼睛盯着别人?
现在各种软件开发包应有尽有,包罗万象,编程工具也异常强大方便,对于国内占主流的MIS系统来说,要完成一个功能实在不是很难的事情,但是如果把系统做为一个整体,则大多数都是运行缓慢、占用资源过大、兼容性差、可维护性差、不稳定的系统,你可曾尝试过开发一个优秀的系统,如果有,你就会发现开发优秀软件是多么困难,对技术的要求是多么高,而你在努力做到完美的过程中水平的提升是多么快。没有追求完美的精神,无论外部环境如何好,你也是不会开发出优秀软件的,等待你的是无休止的修改和维护~,你的技术水平也永远停留在简单的编码阶段,最终只有被迫转行。
好了,我真的适合当个程序员,那我该如何开始?
首先选择一门编程语言和操作系统平台。
操作系统平台国内比较流行的基本有Windows、Linux(Unix)、Mac OS。一般来说大家都选择的是Windows平台,因为此平台是国内处于垄断地位的操作系统,而且有很多优秀的开发工具可供选择,缺点就是Windows平台的开放性不高,往底层探究比较困难(但我对于言必称底层的观点比较反感,不是所有搞开发的都要对底层非常了解,做出用户满意的系统才是我们追求的根本,玩些底层的trick只是一种自我满足罢了。当然我们需要有一些掌握底层技术的高手,但这个是个人选择的问题),而且用惯Windows的程序员在配置、脚本等方面比较弱。Linux是开源平台,当然从理论上你可以操纵Linux的一切,但是有几个人能够达到这一水平?刚刚开始学习开发的程序员,在Linux上也仅仅能够开发一些应用软件罢了。Linux下的开发工具不够人性化,但这种情况正在逐步得到缓解,Eclipse就是非常出色的开发平台。在Linux下开发,你可以得到大量优秀的源代码,并且一切都是透明的(只要你想),但你必须学习很多命令行指令,掌握各种系统和参数配置以及脚本方面的知识。
编程语言的选择更是令人头痛,我涉猎不多,对于有些语言,我无法给出任何建议,只好等这方面的高手来给大家补充了。我仅仅对C++和Java进行一些说明,当然这个也仅仅是基于个人体会,绝对不是权威观点 :P
C++仍然是目前占主流的开发语言(详细的可以阅读TCPL中的相关论述),而且一种语言的发展或消亡都是一个渐进的过程,在可以预见的将来,C++仍然是一门举足轻重的开发语言,但其所针对的领域和方向可能会有所调整,我认为最主要的变化是C++会逐步从商业MIS系统市场上退出。选择C++的理由是关于C++的优秀开发书籍和开发工具最多,相关的资源也异常丰富,待对于一般应用程序的开发掌握之后,无需过渡,就可以深入学习各种技术,因为现阶段讲述系统底层奥秘和高级技术的书籍,基本都是选用C\C++做为示例语言。加上微软精心打造的开发平台Visual Studio或Borland的C++ Builder系列,学习起来更是如虎添翼。但C++现在的缺点也是比较明显的,我最深的感触就是对于XP和Agile Development的支持不好。
Java简化了C++的语法,学习起来比较容易(但随着Java的日益普及和发展,是否能够继续保持这一优势,我不敢断言),Eclipse是非常优秀的Java开发平台,支持XP的整个过程:设计、测试、编码、重构……现阶段敏捷软件开发的主要语言就是Java。而且Java的跨平台特性更是非常大的优势。
实际上,选择哪门语言都没有关系,根据你的发展规划和目前身边的环境选择就可以,没有必要跟风,其后的坚持才是难点。
好,假设你选择了C++做为开发语言,在Windows平台上开发,那么我给你如下的学习建议(其他的选择请各位积极补充……):
C++语言的学习当然是基础,这个阶段由于没有任何在特定平台上的开发经验,我们只能按照书中的例子一个一个输入运行,暂时告别熟悉的图形界面,回到古老的DOS了。参考书的选择是这个阶段很多朋友关心的,Stan Lippman的《Essential C++》和《C++ Primer》是我优先推荐的,而《Essential C++》因为篇幅较小,讲解内容适当,而且对C++ STL的运用有不少描述,显得相当实用,我认为最适合初学者使用。无论选择了那本书做为入门教材,都应该逐个例子逐个例子的消化,不要贪快,但同时要对重点内容有所侧重。我们学习任何东西都是为了解决实际问题,所以请把重点放在我们实际中最常用的部分,而不要过多的追究一些细节和艰深晦涩的不常用技术。
此刻我们会碰到很多过后看来非常简单幼稚的问题,比如为什么编译出错,为什么按照书中的例子输进去却无法通过编译,找不到头文件等等,大体上这是因为刚刚接触程序开发,对程序理解还很初级,以及对于所使用的开发环境不够了解,特定编译器对标准C++的支持程度不一导致。请多阅读关于所使用开发环境的各种文档,以及查阅帮助文档。以我最经常使用的Visual C++配合MSDN来说,当出现一个我不能理解的编译错误时,按F4键编辑器就会自动跳到当前错误地点,下面的输出窗口也会给出错误代码(比如C××××),把错误代码记下,打开MSDN,在索引一栏输入错误代码,就能够查到详细的关于此错误的说明,当然,是英文的(不要问你不会英文怎么办,这是基本要求)。现在的开发工具查错排错非常方便。当然,有时很多错误原因并不是编译器所提示的地方,而是往前或往后一些地方,长期的编程经验可以提高查错速度。此时也请多练习练习Debug技术。
此阶段只要能够掌握C++的基本语言要素,对结构化程序设计和基于对象的设计有一定理解,能够完成一些简单的小程序就可以结束了,毕竟DOS程序现在很难勾起我们学习的欲望了 :P 在此之后可以视自己的情况决定是否学习数据结构,数据结构是程序员的必修课,不可或缺,地位非常重要,即使你现在希望马上进入图形界面程序开发的世界,这一课我也提醒你记着早点补上。
终于可以迈入图形世界,我们要从SDK编程开始,不要担心,这不会花费你太长时间,但却是对Windows程序运行机制进行深入了解的好时机,在此的努力都不会白费(trust me),此时的参考书没有什么好考虑的,基础的有Charles Petzold的《Windows程序设计》,进阶的有《Windows核心编程》。请从《Windows程序设计》开始,Charles Petzold的书通俗易懂,学习起来非常轻松,而且对你的语言要求不高,只要懂C就可以了。
此时容易碰到的问题大多与项目设置有关,如果使用Visual C++,请按Alt+F7调出项目设置对话框仔细检查,并阅读相关文档,熟悉各项配置的意义。
此阶段请重点掌握Windows SDK程序的编写方法,Windows程序的运行机制和Windows消息机制,和常用的Windows API。我们还可以更进一步:尝试用前一阶段学到的C++知识对过程化的SDK程序进行初步的改造,将我们敲入计算机的程序变得可重用,按照自己对基于对象思想和面向对象思想的理解来重新编写例子程序。
OK,现在你已经初步入门了,掌握了C++的基本用法,对面向对象有了一点模糊而自以为是的认识,也能够写出Windows程序了,虽然还有点简单,还有点丑陋,不过,总归是图形界面啊。开始有点感觉了,是吗? :P 别急着往前冲,停一停,将C++和Windows SDK的基础打牢,贪多嚼不烂吗。此时有很多经典书籍等待你去掌握,也有几乎无限的题材供你练习,请尽量多阅读接触下面的资源:
《C++ Primer》
《Windows核心编程》
《应用程序调试技术》
面向对象开发设计方面的书籍
MSDN的Platform SDK部分,Periodicals部分(包含了大量有价值C++、SDK方面的技术文章)
CodeProject里相关的源代码是很好的补充学习资料
现在继续往前走吧,利用SDK开发毕竟有时太过于费时费力,还是使用更高级的应用程序开发框架的好,主要的有MFC和VCL,关于这些框架谁好谁坏的争论我已经听烦了,一句话,能帮助我们完成任务就行,它们无非都是工具,你自己随便选择吧。不过选择好之后,你应该明白,对于你的工具,了解越深,越能发挥它的威力。如果你选择了MFC,我建议学习下面的书籍:
《深入浅出MFC》:关于此书毋庸多说,尽管有人不停的贬低,但它的地位是无可置疑的,而且也是对我最有帮助的书籍之一。
《MFC程序设计》
《Visual C++技术内幕》
然后就停止找书吧,网上开发站点的数不胜数的源代码就是最好的老师了……
学习过程中碰到问题我该怎么办?
我始终认为学习软件开发过程中遇到的问题只有自己尽最大的努力去解决,才能收到最大的成效,对于那些动不动就把问题发到网上指望高手帮你解决的做法我非常不赞同,因为这样你并不能从中学到多少。我建议的做法是,首先尝试自己独力解决问题,花几个小时解决一个问题,是很正常的,不要几分钟解决不了就放弃了;实在无法解决的时候,请尝试尽量减小涉及范围,将问题归结一下,初步形成自己的结论;然后利用搜索引擎或者开发论坛中的搜索功能来搜索是否有对于自己问题的解答;实在没有的时候,再发帖子求助。请了解一点:你遇到的问题都是别人遇到过的,网上肯定有现成的解决方法(因为你还没有到开发研究前所未有的问题的水平:P),只看你找不找得到了,请尽力去利用现有的资源而不是麻烦别人。
CSDN的论坛、MSDN在线文档都是非常好的资源,基本上我们遇到的问题在这里都能找到解答。
(写的有点乱,大家凑合看吧B))
注:上面的内容还不够全面,非常欢迎各位充实。有什么不对之处,也欢迎大家指出讨论。
现在的黑客用什么编程工具比较多?是VC++吗?VC++的版本什么居多?
一句话概括:用自己最顺手的编程工具比较多。
编程工具比较“同质化”,同样的功能,用VC可以实现,那么用BC/Delphi/CodeBlocks就都可以实现,不存在用哪个多的问题。
当然,从操作习惯和语言种类上说,黑客更喜欢标榜自己擅长UNIX,初级黑客最常见使用的是Python语言。