
C/C++
文章平均质量分 64
oathevil
夢,是抹不掉的記憶
展开
-
GCC 简单使用
<br />编译生成目标文件(.*), -I表示被检索的头文件路径<br /> <br />gcc -c Main.m -I/GNUstep/System/Library/Headers/<br /> <br /> <br />-I 表示头文件查找的路径<br />-L 表示库文件查找路径<br />- l 表示需要链接的库文件<br /> <br /> <br />gcc -o helloworld helloworld.m /<br />-fconstant-string-class=NSC转载 2010-12-14 01:13:00 · 1371 阅读 · 0 评论 -
关于Detours的一些介绍(出处不详)
<br />---- Detours是微软开发的一个函数库(源代码可在http://research.microsoft.com/sn/detours 免费获得), 用于修改运行中的程序在内存中的影像,从而即使没有源代码也能改变程序的行为。具体用途是: <br /><br />拦截WIN32 API调用,将其引导到自己的子程序,从而实现WIN32 API的定制。 <br />为一个已在运行的进程创建一新线程,装入自己的代码并运行。 <br />---- 本文将简介Detours的原理,Detours库函数的转载 2010-12-30 16:01:00 · 715 阅读 · 0 评论 -
微软研究院Detour开发包之API拦截技术
<br />我们截获函数执行最直接的目的就是为函数增添功能,修改返回值,或者为调试以及性能测试加入附加的代码,或者截获函数的输入输出作研究,破解使用。通过访 问源代码,我们可以轻而易举的使用重建(Rebuilding)操作系统或者应用程序的方法在它们中间插入新的功能或者做功能扩展。然而,在今天这个商业 化的开发世界里,以及在只有二进制代码发布的系统中,研究人员几乎没有机会可以得到源代码。本文主要讨论Detour在Windows二进制PE文件基础 上的API截获技术。对于Linux平台,作这件事情将会非常的简转载 2010-12-30 16:02:00 · 851 阅读 · 0 评论 -
Detour开发包介绍(1):概述
<br /><br />微软研究院Detours 开发包是一个用来在二进制级别上对程序中的函数 (Function) 或者过程 (Procedure) 进行修改的工具库。一般我们将这种技术称为 Hook 。在现实中,这种技术可以应用在很多场景下。比如截获某些 Windows API ,在实际调用到系统函数前进行一些过滤工作;软件中使用到了一些没有源代码的第三方库,但是又想增强其中某些函数的功能;修改函数返回值;为调试以及性能测试加入附加的代码;或者截获函数的输入输出作研究;破解使用。等等。 Detours转载 2010-12-30 16:05:00 · 1084 阅读 · 0 评论 -
Detour开发包介绍(2):使用
<br /><br />一般来说,使用Detours 的代码都具有固定的模式。 Detours 1.5 和 Detours 2.1 的接口函数变了很多,这里按照 2.1 版本对基本的使用方法进行说明。常用的函数有下面几个:<br />DetourTransactionBegin():开始一次 截获 或者 解除截获 过程。<br />DetourUpdateThread():列入一个在 DetourTransaction 过程中要进行 update 的线程。这个函数的作用稍微有一些复杂,会在后面专门说明。<b转载 2010-12-30 16:06:00 · 1039 阅读 · 0 评论 -
桌面捕获者(Deskcaptor.exe)[原创]
Function: 可定时捕获桌面屏幕截图以及当前正在运行的进程列表,并发送至指定的邮箱。可伪造邮件发送者。 涉及子功能:1 邮件发送2 屏幕截取3 进程枚举(有兴趣的编程爱好者可以留言索取源代码)Usages:DeskWatcher.exe User-mail Pwd SmtpServer Receiver Sender IntervalExample:DeskWatcher.exe a@a.com 123456 smtp.a.com receiver@b.com sender原创 2011-05-10 21:21:00 · 768 阅读 · 2 评论 -
C语言中可变参数函数的设计
<br />c语言中可变参数函数的设计<br /> ----- 最近想好好学学这个, 先把网上搜集得资料贴上. <br /><br /><br />================================================================================<br />================================================================================<br />===转载 2011-05-21 11:46:00 · 6515 阅读 · 1 评论 -
C语言函数调用约定
<br /> <br /> <br /> <br />在C语言中,假设我们有这样的一个函数:<br /><br />int function(int a,int b)<br /><br />调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级<br />语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传递参数,传递参数转载 2011-05-21 12:08:00 · 950 阅读 · 0 评论 -
ZLIB:gzopen与compress2函数压缩的内容有什么不同?
<br />zlib库中,可以用compress2()函数对一块内存区域进行压缩,也可以使用gzopen()和gzwrite()两个函数将内存中的信息压缩后写入gz文件。<br /> 测试中发现,如果把compress2()函数压缩后的内容直接写成文件,这个文件无法被gzip等程序打开,可见内存压缩后的内容并不是一个标准的gz文件。<br /> compress2()函数与gzopen()函数所产生的压缩内容到底有什么不同呢?下面是我的实验:<br /><br />1、准备一个文本文件,字节数为转载 2011-04-13 12:37:00 · 4314 阅读 · 0 评论 -
关于const char*和char*、const char** 和char** 赋值问题
<br /><br />根据ANSI C标准的赋值约束条件:<br /> 1. 两个操作数都是指向有限定符活无限定符的相容类型的指针。<br /> 2. 左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。<br />一、const char*和char*<br /> const char*的类型是:“指向一个具有const限定符的char类型的指针”。(不能修改其值)<br /> char*的类型是:“指向一个char类型的指针”。<br /> 因此const cha转载 2011-04-13 12:20:00 · 968 阅读 · 0 评论 -
如何在C++获得系统时间
<br /><br />//方案— 优点:仅使用C标准库;缺点:只能精确到秒级 <br />#include <time.h> <br />#include <stdio.h> <br />int main( void ) <br />{ <br />time_t t = time(0); <br />char tmp[64]; <br />strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) ); <br />puts(转载 2010-11-04 10:44:00 · 528 阅读 · 0 评论 -
C语言的(...)参数
<br />关键字: c语言 (...)<br />C语言中有一种长度不确定的参数,形如:"…",它主要用在参数个数不确定的函数中,我们最容易想到的例子是printf函数。<br /><br /> 原型:int printf( const char *format [, argument]... );<br /><br /> 使用例:printf("Enjoy yourself everyday!/n");<br />printf("The value is %d!/n", value);<br /><转载 2010-12-27 17:06:00 · 1714 阅读 · 0 评论 -
C中可变参数函数实现
<br />一、 从printf()开始<br />原型:int printf(const char * format, ...);<br />参数format表示如何来格式字符串的指令,…<br />表示可选参数,调用时传递给"..."的参数可有可无,根据实际情况而定。<br />系统提供了vprintf系列格式化字符串的函数,用于编程人员封装自己的I/O函数。<br />int vprintf / vscanf(const char * format, va_list ap); // 从标准输入/输出格转载 2010-12-27 16:55:00 · 824 阅读 · 0 评论 -
GCC 编译错误
<br /><br />$ gcc.sh Main<br />Info: resolving ___objc_class_name_NSAutoreleasePool by linking to __imp____objc<br />_class_name_NSAutoreleasePool (auto-import)<br />Info: resolving ___objc_class_name_NSConstantString by linking to __imp____objc_<br />clas原创 2010-12-14 01:35:00 · 2621 阅读 · 0 评论 -
在C++中实现foreach循环
使用过C#、PHP这些更高级语言的朋友一定知道foreach循环。foreach语句给编程带来了很大的方便,减少了代码,并增加了程序的可读性。C++虽然不支持foreach关键字,但C++是一门强大的语言,只要稍微用一点小技巧,也可以在C++中使用foreach循环。 在C#中,foreach语句的效果让人吃惊。foreach语句省去了复杂而又类似的循环控制语句,使代码非常简洁明了。下面的例子可以清楚地看到这一点。 假有一个类型为ContainerType类型的容器Container,它的每转载 2010-12-19 15:55:00 · 17507 阅读 · 0 评论 -
deelx 中Replace的使用 (正则用于替换的示例)
<br /> char * s1 = "https://www.google.com.hk/default.aspx"; CRegexpT <char> regexp("(google)"); // new_str 字符串是替换过程中分配的内存 char * new_str = regexp.Replace(s1, "baidu"); printf("%s/n", new_str); // new_str 使用完毕需使用ReleaseString进行释放 CRegexpT<char>原创 2010-10-30 21:30:00 · 2278 阅读 · 0 评论 -
关于屏蔽编译警告的小问题
<br />屏蔽VC++ 6.0编译警告,加入如:<br /> <br />#pragma warning(disabled:4786)<br /> <br />需要注意的一点是,假你想屏蔽STL中的如有关map的相关警告,那么上述语句必须加在 #include <map.h>之前。<br /> <br />建议加在 stdafx.h 文件中所有包含的头文件之前。 这样一来,基本上可以达到屏蔽的效果。原创 2010-10-31 00:56:00 · 2038 阅读 · 0 评论 -
C++ Boost库简介
<br />C++ Boost库简介 <br /> boost是一个准标准库,相当于STL的延续和扩充,它的设计理念和STL比较接近,都是利用泛型让复用达到最大化。不过对比STL,boost更加实用。STL集中在算法部分,而boost包含了不少工具类,可以完成比较具体的工作。 <br /> boost主要包含一下几个大类:字符串及文本处理、容器、迭代子(Iterator)、算法、函数对象和高阶编程、泛型编程、模板元编程、预处理元编程、并发编程、数学相关、纠错和测试、数据结构、输入/输出、跨语转载 2010-10-31 23:42:00 · 625 阅读 · 0 评论 -
如何学好C++, 用好类库很重要
<br /><br />如果你有一定的C基础可能学起来比较容易些,但是学习C++的过程中又要尽量避免去使用一些C中的思想;平时还要多看一些高手写的代码,遇到问题多多思考,怎样才能把问题抽象化,以使自己头脑中有类的概念;最后别忘了经常上机自己调调程序,这是谁也代替不了的.<br />C++类库介绍<br /> 再次体现了C++保持核心语言的效率同时大力发展应用库的发展趋势!!在C++中,库的地位是非常高的.C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论.转载 2010-10-31 23:46:00 · 497 阅读 · 0 评论 -
直接使用SMTP协议命令而在程序中实现电子邮件传送
<br />摘要:本文介绍了一种采用SMTP协议规范并通过直接使用SMTP协议命令而在程序中实现电子邮件传送的方法。并在VC++开发环境下给出了部分关键的实现代码。<br /><br />前言<br /><br /> 电子邮件服务作为Internet上应用最多和最广的服务项目得到了非常广泛的应用,在网络应用中也起到非常重要的作用。如同其他的网络服务,电子邮件系统也有其使用的传输协议,包括SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)、POP(Post Office转载 2010-10-30 18:41:00 · 6057 阅读 · 0 评论 -
VC++技巧 在控制台程序中隐藏控制台窗口
当创建一个控制台程序时,又不想看到其窗口可用如下代码解决:<br /><br />#ifdef NDEBUG<br />#pragma comment( linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"" )<br />#endif<br /><br />首先来看一下linker的 /subsystem 选项<br /><br /> 该选项的语法形式如下:<br /> /SUBSYSTEM:{CONSOLE|EFI_APPLICATION转载 2010-11-02 16:03:00 · 822 阅读 · 0 评论 -
VC中编译、运行程序的小知识点
1、Run-Time Library<br />Run-Time Library是编译器提供的标准库,提供一些基本的库函数和系统调用。<br />我们一般使用的Run-Time Library是C Run-Time Libraries。当然也有Standard C++ libraries。 <br />C Run-Time Libraries实现ANSI C的标准库。VC安装目录的CRT目录有C Run-Time库的大部分源代码。 <br />C Run-Time Libraries有静态库版本,也有动态链转载 2010-11-02 16:03:00 · 542 阅读 · 0 评论 -
C++ String 类常用函数
<br /><br />string类的构造函数:<br />string(const char *s); //用c字符串s初始化<br />string(int n,char c); //用n个字符c初始化<br />此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常<br />string类的字符操作:<br />const char &ope转载 2011-04-13 12:21:00 · 472 阅读 · 0 评论 -
LPCTSTR和GetBuffer与CString
<br /><br />传参数时不可以传CString ,CString 在ATL MFC中定义是不同的,而且在各个版本里也略有不同。注意。<br /> <br />有两方法LPCTSTR和GetBuffer() <br />看看这个 <br /> <br />LPCTSTR 与 GetBuffer(int nMinBufLength) <br />这两个函数提供了与标准C的兼容转换。在实际中使用频率很高,但却是最容易出错的地方。这两个函数实际上返回的都是指针,但它们有何区转载 2011-04-13 12:22:00 · 783 阅读 · 0 评论 -
C语言指针导学(1)——指针到底是什么
一.指针到底是什么指针(pointer)到底是什么,弄清楚这个问题很重要,这是我们所讨论的话题的源头,而在阐述指针是什么之前,我们需要先来看一下变量的概念。我们知道,计算机的内存(primary storage)被划分为多个存储单元,这些存储单元可以以单个或者顺序相连组成一个更大单元的方式被使用。每一个单独的存储单元都是一个字节(byte),它通常由8个位(bit)组成,每一个位可以表转载 2011-06-05 11:19:00 · 923 阅读 · 0 评论 -
关于51单片机“外部中断触发方式”的经验总结
51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。这个原理很好理解。但应用时需要特别注意的几点:1) 电平触发方式时,中断标志寄存器不锁存转载 2011-06-07 23:35:00 · 2093 阅读 · 2 评论 -
C语言指针导学(6)——使用指针时的“陷阱”
六.使用指针时的“陷阱”“C语言诡异离奇,陷阱重重,却获得了巨大成功!”——C语言之父Dennis M. Ritchie。Ritchie大师的这句话体现了C语言的灵活性以及广泛的使用,但也揭示了C是一种在应用时要时刻注意自己行为的语言。C的设计哲学还是那句话:使用C的程序员应该知道自己在干什么。有时用C写的程序会出一些莫名其妙的错误,看似根源难寻,但仔细探究会发现很多错误的原因是概念不清。转载 2011-06-05 11:11:00 · 768 阅读 · 0 评论 -
C语言指针导学(5)——指针与结构
五.指针与结构 ——理解C++和数据结构的基础指针不仅可以指向变量、数组、函数,还可以和结构(structure)联系起来,这使得C语言的威力倍增,初学C语言的朋友对结构可能不太重视,对它的理解也不够深入,但事实上,结构是一个非常重要的工具,有了它我们可以很轻松的构建一些仅靠其它C语言特性做起来很复杂的程序。深入地理解结构会对你理解C++的面向对象有很大帮助,并且会让在你学习数据结构转载 2011-06-05 11:13:00 · 1452 阅读 · 0 评论 -
C语言指针导学(3)——指针与数组的“爱恨情仇”
三.指针与数组的“爱恨情仇”本将中指针的算术运算本应放在第二讲中,但考虑到它与数组关系密切故将其纳入本将。1.指针的算术运算在上一讲指针初始化的第4种方式中提到了可以将一个T类型数组的名字赋给一个相同类型的指针,这说明指针可以和数组发生联系,在后面我们会看到这种联系是十分密切的。当有语句char ary[100] = {a, b, c, d, e, f};转载 2011-06-05 11:15:00 · 844 阅读 · 0 评论 -
C中static的作用
<br /><br />在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。<br />(1)先来介绍它的第一条也是最重要的一条:隐藏。<br />当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。<br />下面是a.c的内容<br />char a = 'A'; // global variable<br />void msg()<br />{<br />转载 2011-05-06 16:34:00 · 632 阅读 · 0 评论 -
C语言编译全过程
<br /><br /><br /><br /> 编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。<br /> 编译的完整过程:C源程序-->预编译处理(.c)-->编译、优化程序(.s、.asm)-->汇编程序(.obj、.o、.a、.ko)-->链接程序(.exe、.elf、.axf等)<br /><br />1. 编译预处理<br /><br /转载 2011-05-05 21:58:00 · 654 阅读 · 0 评论 -
优质代码的十诫
<br />1.- DRY: Don’t repeat yourself.<br />DRY 是一个最简单的法则,也是最容易被理解的。但它也可能是最难被应用的(因为要做到这样,我们需要在泛型设计上做相当的努力,这并不是一件容易的事)。它意味着,当我们在两个或多个地方的时候发现一些相似的代码的时候,我们需要把他们的共性抽象出来形一个唯一的新方法,并且改变现有的地方的代码让他们以一些合适的参数调用这个新的方法。<br />DRY 这一法则可能是编程届中最通用的法则了,目前为止,应该没有哪个程序员对这一法则存有异转载 2011-05-05 22:01:00 · 641 阅读 · 0 评论 -
编程中的命名设计那点事
<br /><br />在我开始设计系统的时候,我会花去很多时间去设计命名,因为好的命名和好的设计是分不开的。<br />In the beginning was the Word, and the Word was with God, and the Word was God<br />太初有道。道与神同在,道就是神。 (约翰福音第一章,第一节)<br />在设计过程中给类,方法和函数好的命名会带来好的设计,虽然这不是一定成立,但是如果坏的命名那一定不会给你带来好的设计。在设计过程,如果你发现你很难命名某转载 2011-05-05 22:04:00 · 547 阅读 · 0 评论 -
C语言指针导学(2)——指针的定义及运算
二.指针的定义及运算上一讲已经说过,指针是一种变量,它也有自己的地址,但由于它是专门用来存放地址的变量,所以把它认为是种特殊的变量,既然有着特殊的身份,那么也理应受到特殊的待遇,下面来看看它享受了那些优待。1.指针的定义在C语言中,定义一个普通的变量(如整型数),我们这样做:int i; 而定义一个指针变量(指针)我们需要这样做:int *p ; 还记得吗,一个矩形中的值是有类型的,转载 2011-06-05 11:17:00 · 760 阅读 · 0 评论 -
C语言指针导学(4)——分清函数指针和指针函数
四.分清函数指针和指针函数关于指针和数组斩不断理还乱的恩怨还真是说了不少,不过现在应该已经理清了。有了上一讲的基础,本讲的内容相对来说就比较容易理解了。1.指向函数的指针(函数指针)来分析这样一个声明,void (*f) ( ); 虽然( )的优先级高于*,但由于有括号存在,首先执行的是解引用,所以f是一个指针;接下来执行( ),表明f指向一个函数,这个函数不返回任何值。现在得出结论:转载 2011-06-05 11:14:00 · 834 阅读 · 1 评论 -
关于ANSI C标准的一点收获
<br /><br />有时候必须非常专注地阅读ANSI C标准才能找到某个问题的答案。一位销售一程师把下面这段代码作为测试例发给Sun的编译器小组。<br />foo(const char **p){}<br />main(int argc,char **argv)<br />{<br /> foo(argv);<br />}<br />如果编译这段代码,编译器会发出一条警告信息:<br />line5:warning:argument is incompatible with prototyp转载 2011-04-13 12:36:00 · 723 阅读 · 0 评论 -
const char *与char *转换的本质
<br /><br />BYTE bArray[16]; <br />CHAR *cArray[17] ; <br />//BYTE 转 Char * <br />_tcscpy( cArray , (CHAR *)bArray); <br />vg<br />//CString to unsigned char* 非UNICODE情况下 <br />unsigned char uncArray[16] ; <br />CString s = _T("ABCD") ; <br />_tcscpy( (CHA转载 2011-04-13 12:27:00 · 12969 阅读 · 0 评论 -
socket select()用法
<br /><br />socket select()用法 <br />2007-11-15 18:53<br />一、winsock中 <br />#include <winsock.h><br />原型<br />int select(<br />int nfds,<br />fd_set* readfds,<br />fd_set* writefds,<br />fd_set* exceptfds,<br />const struct timeval* timeout<br />);<br />nfd转载 2011-04-13 12:39:00 · 685 阅读 · 0 评论 -
C#读写ini文件详解(1)
<br /><br />C#读写ini文件是如何进行的呢?C#读写ini文件需要的方法有哪些呢?本文就向你一一介绍。C#读写ini文件之前要了解的概念:INI就是扩展名为"INI"的文件,其实他本身是个文本文件,可以用记事本打开,主要存放的是用户所做的选择或系统的各种参数.C#读写ini文件其实并不是普通的文本文件.它有自己的结构.由若干段落(SECTION)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键字(KEYWORD)和一个等号,等号右边就是关键字的值(VALUE).例如:[Section转载 2011-04-13 12:31:00 · 844 阅读 · 0 评论 -
SocketAPI,CAsyncSocket,CSocket内幕及其用法
<br /><br />Socket有同步阻塞方式和异步非阻塞方式两种使用,事实上同步和异步在我们编程的生涯中可能遇到了很多,而Socket也没什么特别。虽然同步好用,不费劲,但不能满足一些应用场合,其效率也很低。<br /> 也许初涉编程的人不能理解“同步(或阻塞)”和“异步(或非阻塞)”,其实简单两句话就能讲清楚,同步和异步往往都是针对一个函数来说的,“同步”就是函数直到其要执行的功能全部完成时才返回,而“异步”则是,函数仅仅做一些简单的工作,然后马上返回,而它所要实现的功能留给别的线程或者函数去转载 2011-04-13 12:33:00 · 845 阅读 · 0 评论