自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (4)
  • 收藏
  • 关注

原创 自己动手写搜索引擎

实现了一个搜索引擎,可以检索csdn网站的所有博客文章,当然,最新的文章是没有的。   先说下项目思路吧, 整个项目分为6个子程序:       爬虫1:爬取所有csdn网站的网页,并将爬到的博客文章url存入数据库。(python)       爬虫2:从数据库中取文章url,并爬取文章内容到数据库。(python)      分词程序:利用friso分词库,将所有文章内容切分成

2015-08-14 14:49:00 6402 16

原创 多线程程序跑久了效率下降分析

最近在写一个搜索引擎,有个中间程序是分析分词结果文件,建立倒排索引。最初写的是单线程的,效率低到无语,于是又改成多线程的了。本以为万事大吉,可是在分析了将近2000文件的时候,效率低的和单线程的没什么区别了。打开任务管理器,线程数显示3(我设置的子线程数量最高为15,加上启动就有的,程序刚运行的时候线程数可以达到20个)。    百度了下,Windows单个程序的线程数是有上限的,一般只能开到

2015-08-12 20:13:12 1627 1

原创 const变量探究

同样的一段代码,在c和c++中的表现却不相同。#include #include int main(){ const int i = 1; int *j =(int *) &i; *j = 0; printf("%d,%d\n", i,*j); system("pause");}当用c编译器编译运行时,结果是0,0当用c++编译器编译运行时,结果是1,0原因:c语言

2015-07-19 16:03:44 652

原创 栈变量被覆盖的问题在不同编译器中的表现,蛋疼的VC++

看到一道题说栈中连续定义一个指针和一个数组,类似于这样{char *ptr = 指向一个字符数组;char buf[8];gets(buf);strncpy(ptr,buf,8);}当修改buf数组时发生越界会修改ptr指针的指向,这设计到程序健壮性的问题。当我用VS2013尝试这段代码时,诡异的事情发生了,明明输入了多于8个的字符,但是ptr的指向并没有改

2015-07-18 19:37:25 1238 4

原创 从零实现一个跨平台的静态网页服务器

大三要结束了,想写点东西,一是为了积累些技术,二是为了下学期实习做做准备,不然简历上的项目经验真没什么好写的。c/c++的底层是操作系统和各种协议以及内存布局,java的底层是jvm。不想写一般的应用程序,那就从0实现一个跨平台的静态网页服务器吧。封装跨平台的各个类:有Tcp和Udp的套接字类,Http包的解析和生成类还有一个读取Html文件的类运行结果还算不错,W

2015-07-03 11:20:13 1699

原创 c++制作小游戏--雷电

最近无聊,于是用c++实现了一个小游戏--雷电,貌似运行的还不错,贴图和声效也是Duang!Duang!的。整个项目我也会给出下载链接,有兴趣的可以编译运行一下,用到了C++11的新特性,最好是使用vs2013编译。游戏说明:操作:方向键    -- 控制移动空  格    -- 开火P         -- 打开商店,再起按下关闭0~9和+-键 -- 购买(需打开商店)

2015-07-01 10:05:18 19552 5

原创 SNL文法的递归下降语法分析器

得到token序列后,我们就可以采用递归下降法对其进行语法分析。如果没有语法错误,打印token序列,提示没有语法错误,否则,打印已经匹配的token,提示语法错误。(下面程序使用vs2013编译)#define _CRT_SECURE_NO_WARNINGS#include #include #include #include #include using namesp

2015-06-14 14:01:05 6842 7

原创 SNL文法的词法分析器

知道文法规则后,我们就要分析出其中的所有的符号、操作符、标示符(id)、字面值(nb)、以及关键字。其中符号、操作符、关键字都是一符一类,我们需要写程序分析每一个字符,最终得到一个token序列,标示符表及字面值表。闲话少说,看代码(下面程序使用vs2013编译)#define _CRT_SECURE_NO_WARNINGS#include #include #include #in

2015-06-14 13:45:16 5261 2

原创 SNL文法

这学期学编译原理,课程设计是为SNL文法实现一个词法分析器,和递归下降法或LL(1)分析法实现的语法分析器。总程序:1)Program::=ProgramHead DeclarePart ProgranBody .2)ProgramHead::=program  ProgranName3)ProgranName::=ID4)DeclarePart::=TypeDecpa

2015-06-14 13:36:43 3323

原创 c语言中如何实现可变参数

c语言函数库中有不少类似于printf,scanf的函数,这些函数接收的参数个数是不确定的。这些函数实际是通过文件中的va_list,va_start,va_arg,va_end宏定义是实现的。另外,我们知道程序运行时的内存结构后,也可以通过直接访问这些内存空间获得实际参数值(事实上stdarg.h文件中的相关宏定义就是这么操作的)。

2015-06-14 12:50:39 693

原创 Windows下利用原始套接字实现的一个抓包程序Demo

早就学过了套接字编程,但是原始套接字还没用过。最近听了网络安全老师的课,心血来潮,写了个抓包程序Demo,把代码分享给大家,感兴趣的可以看看。引用一句网络安全老师的话:“你们要本着技术的心态去实践,哎,一部分人,写着写着就成黑客了”。#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #inc

2015-05-24 11:12:49 9855 10

原创 四轴飞行器,炸鸡两次终于起飞了

大三了,想着大学得留下点什么。既然没有留下女朋友,那么只好留下梦想了。以前觉得四轴飞行器很高端,很有科技范,对我们玩软件的来说遥不可及。但是随着自己做的四轴飞行器摇摇晃晃的升空,我才发现:“没什么难的嘛!”。

2015-05-18 11:37:59 2184 1

原创 晒一下我的智能小车,留作纪念

写写程序,玩玩硬件。树莓派做小车控制中心,笔记本做遥控控制,还可以用语音来控制。控制程序自己写的,客户端程序(笔记本端)主要是 套接字编程+微软的语音识别,服务端(树莓派端)主要是 套接字编程+wiringPi。通过控制GPIO口的输出信号,控制小车的前后左右以及原地转向,以及超声波测距,速度支持5个档。没有透明胶带了,拿我同学的“绝对封印”。是不是很呆很萌!!

2015-05-18 11:11:03 1485 2

原创 windows下利用微软的SpeechSDK实现语音控制

语音识别是当前研究的热点,我们可以利用微软的语音识别引擎来进行二次开发。首先需要安装微软的SpeechSDK,安装完成后配置项目的包含目录和库目录,这些都不是重点,不会的可以去百度。然后就可以写代码了,码农嘛,还是看代码有感觉。源文件#include #include #include #include #include #include #pragma comment(li

2015-05-14 10:35:44 8011 6

原创 Windows下实现文件检索

递归函数最适用的场合莫过于用来实现文件检索了。windows系统提供了FindFirstFile和FindNextFile两个系统调用,利用这两个函数,我们可以轻松实现windows下的文件检索。源文件#include #include #include #include #include using namespace std;int num = 0;

2015-05-14 10:09:24 967

原创 BASE64编码及SMTP协议简单实现

一个可以发送邮件的小demo,又可以做坏事了!!!

2015-05-13 22:56:17 2479

原创 c&c++反汇编与逆向分析学习笔记(10)--关系及逻辑运算

在编译器眼里,一切简单的东西都复杂了,一切为了CPU服务。我们来看编译器是怎么处理关系及逻辑运算的,又是怎么对其进行优化的。gogogo!计算机是如何判断"==","!=",">=","","    在VC6.0中,是利用各种类型的跳转来实现两者间的关系比较的,根据比较结果所影响的标记位来选择对应的条件跳转指令。如何选择条件跳转指令,需要根据两个进行比较的数值所知用到的关系运算,不

2015-04-14 11:35:46 1015

原创 c&c++反汇编与逆向分析学习笔记(9)--自增和自减

自增和自减分为两种:    1>自增自减运算符在语句块之后,先执行语句块,再执行自增自减    2>自增自减运算符在语句块之前,先执行自增自减,再执行语句块通常,自增和自减是被拆分成两条汇编指令执行的。    //C++源代码    int nVarOne = argc;    int nVarTwo = argc;    //变量后缀自增参与表达式运算    nV

2015-04-11 21:26:40 1052

原创 c&c++反汇编与逆向分析学习笔记(8)--除法表达式

除法运算对应的汇编指令分为有符号idiv和无符号div两种。除法指令的执行周期较长,效率也低,所以编译器想尽办法用其他运算指令代替除法指令。C++中的除法和数学中的除法不同。在C++中,除法运算不保留余数,有专门的的求取余数的运算(运算符为%),也称为取模运算。对于整数除法,C++的规则是仅仅保留整数部分,小数部分完全舍弃。    在C语言中        两个无符号数相除,结果为无符号数

2015-04-11 19:50:07 1551

原创 c&c++反汇编与逆向分析学习笔记(7)--乘法表达式

乘法运算对应的汇编指令有有符号imul和无符号mul两种。由于乘法指令的执行周期较长,在编译过程中,编译器会先尝试将乘法转换成加法,或使用移位等周期较短的指令。当他们都不可转换时,才会使用乘法指令。    //C++源码说明    //防止被视为无效代码,将每条运算作为printf参数使用    //printf函数的讲解省略    int nVarOne = ar

2015-04-11 17:29:41 878

原创 c&c++反汇编与逆向分析学习笔记(6)--减法表达式

减法运算对应于汇编指令SUB,虽然计算机只会做加法,但是可以通过补码转换将减法转换为加法形式来完成。    //C++源码    int nVarOne = argc;//变量定义    int nVarTwo = 0;    scanf("%d",&nVarTwo);//获取变量nVarTwo的数据,使用scanf防止变量被常量化    nVarOne = nVarOne -

2015-04-11 11:32:43 947

原创 c&c++反汇编与逆向分析学习笔记(5)--加法的求值过程和编译器优化

学了逆向分析之后,发现,虽然我们写了程序,但是程序并不是按完全按照我们写的代码一句一句执行的,很有可能一大部分代码都被编译器优化修改了。只有了解这些东西,我们才能写出性能更加优益,可读性与精炼并存的代码。    在VC++6.0中,算术运算和其他传递计算结果的代码组合起来才能被视为一条有效的语句,如赋值运算或函数的参数传递。单独的运算虽然可以编译通过,但是并不会生成代码。因

2015-04-10 11:34:55 1216

原创 c&c++反汇编与逆向分析学习笔记(4)--启动函数和用户入口

VC++开发的程序,在调试时总是从main或WinMain函数开始,于是很多开发者误认为它们是程序的第一条指令执行处,这个认识其实是错误的。main或WinMain也是一个函数,也需要一个调用者。在它们别调用前,编译器其实已经做了很多事情,所以main或WinMain应该是“语法规定的用户入口”,而不是“应用程序入口”。在应用程序被操作系统加载时,操作系统会分析执行文件内的数据,分配相关资源,读取

2015-04-10 10:22:29 1203

原创 c&c++反汇编与逆向分析学习笔记(3)--基本数据类型表现形式

千万不要小看这些数据类型,我相信你肯定不知道float型数在变参函数参数传值时发生了什么。“小尾方式”在内存中存放数据,即按字节存放,高数据位存放在内存的低端,低数据位放在内存的高端。比如十六进制数0x12345678在内存中,将会存放为78 56 34 12。而大端则存放为 12 34 56 78。X86体系结构为小尾方式。整数类型    C++提供的整数类型有三种:int、

2015-04-05 22:17:16 1666

原创 c&c++反汇编与逆向分析学习笔记(2)--反汇编静态分析工具IDA

所谓“静态分析”,是相对于前面提到的“动态分析”而言的。在“动态分析”过程中,调试器加载程序,并以调试模式运行起来,分析者可以在程序的执行过程中观察程序的执行流程和计算记过。但是,在实际分析中,很多场合不方便运行目标,比如软件的某一模块(无法单独运行)、病毒程序、设备环境不兼容导致的无法运行……那么,在这个时候,需要直接把程序的二进制代码翻译程汇编语言,方便程序员阅读。想这样由目标软件的二进制代码

2015-04-05 17:42:17 8355 1

原创 c&c++反汇编与逆向分析学习笔记(1)--调试工具OllyDBG

我学习用的数据是钱松林和赵海合著的《C反汇编与逆向分析技术揭秘》,这本书绝对可以帮助程序员提高自己,修炼自己的内功。在软件的开发过程中,程序员会使用一些调试工具,以便高效地找出软件中存在的错误。而在逆向分析领域,分析者也会利用相关的调试工具来分析软件的行为并验证结果。其中OllyDBG是逆向分析中必不可少的一款软件,使用它,程序会按调试者的一员以指令为单位的执行。调试者可以随时中断目标的指

2015-04-04 17:14:00 10648 1

CSDN博文搜索引擎源码

博客文章搜索引擎源码

2016-10-11

静态网页服务器

自己动手封装了跨平台的套接字类和HTTP协议解析类,从零实现一个静态网页服务器

2015-07-03

VC++写的小游戏-雷电

操作: 方向键 -- 控制移动 空 格 -- 开火 P -- 打开商店,再起按下关闭 0~9和+-键 -- 购买(需打开商店) Enter -- 开始或继续 Esc -- 暂停游戏 R -- Hero死亡后继续游戏(也可以用Enter键) 说明: Hero初始攻击力为2,怪物血量会随着时间增加,因此需要在商店升级攻击。 打Boss可以获得材料,升级武器。

2015-07-01

最全的XML中文参考手册

万变不离其宗,把握XML的核心、XML的精髓不会变,因为它才是XML制胜的武器

2015-02-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除