李sir_Blog

博客园 首页 联系 订阅 管理
  705 随笔 :: 58 文章 :: 134 评论 :: 193万 阅读

09 2011 档案

摘要:OpenMP是一个支持共享存储并行设计的库,特别适宜多核CPU上的并行程序设计。今天在双核CPU机器上试了一下OpenMP并行程序设计,发现效率方面超出想象,因此写出来分享给大家。在VC8.0中项目的属性对话框中,左边框里的“配置属性”下的“C/C++”下的“语言”页里,将OpenMP支持改为“是/(OpenMP)”就可以支持OpenMP了。先看一个简单的使用了OpenMP程序int main(int argc, char* argv[]){#pragma omp parallel for for (int i = 0; i < 10; i++ ) { printf("i = 阅读全文
posted @ 2011-09-30 15:30 李sir 阅读(1699) 评论(0) 推荐(0) 编辑

摘要:http://blog.csdn.net/laiboy/article/details/5755324 阅读全文
posted @ 2011-09-30 13:41 李sir 阅读(1005) 评论(0) 推荐(0) 编辑

摘要:我们知道,很多PE分析工具都可以查看一个EXE文件的引用DLL文件函数表,其实,这个本身就是存储在EXE头部的一个重要信息,今天,我们就来研究一下:我们借用一张PE结构图来分析:一个EXE完整的PE结构分五大部分。见上图.最开头的是部分是DOS部首,DOS部首由两部分组成:DOS的MZ文件标志和DOS stub(DOS存根程序)。之所以设置DOS部首是微软为了兼容原有的DOS系统下的程序而设立的。紧接着的是真正的PE文件头。值得注意的是PE文件头中的IMAGE_OPTIONAL_HEADER32是一个非常重要的结构,PE文件中的导入表、导出表、资源、重定位表等数据的位置和长度都保存在这个结构里 阅读全文
posted @ 2011-09-22 12:19 李sir 阅读(12535) 评论(0) 推荐(1) 编辑

摘要:话说,有这样一道据说是月薪2W的笔试题:#include "stdio.h"void print(){*}void main(){}要求在*部分写代码使整个程序运行后输出“hello world”,有些人说,这还不简单啊,于是写出这样的代码:view sourceprint?01.#include "stdio.h" 02.void print() 03.{ 04.printf("hello world"); 05.} 06.void main() 07.{ 08.print(); 09.}这样写的确是没问题,但是违背了题目的要求,因 阅读全文
posted @ 2011-09-22 11:34 李sir 阅读(2591) 评论(3) 推荐(1) 编辑

摘要:百度上比较好的解释是:SSDT的全称是System Services Descriptor Table,系统服务描述符表。这个表就是一个把ring3的Win32 API和ring0的内核API联系起来。SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。说白了,SSDT就是把系统两个不同级别的函数给关联起来,因为为了安全需要,我们平常所使用的API函数基本都是在ring3下的函数,ring3的级别比较低,但是有些涉及到系统底层的函数怎么办呢?Windows就给出一个SSDT表,把ring3和ring0的函数给关联起来,这样,我们就通过 阅读全文
posted @ 2011-09-22 11:25 李sir 阅读(3312) 评论(0) 推荐(3) 编辑

摘要:留言板,论坛里的垃圾广告想必是每个人都很头疼的问题,为什么屡禁不止?这主要是大量的发帖机器人的恶劣行为,当然也有人工的。过滤广告的方法太多了,这不是我们重点讨论的问题。这里主要说一说我遇到的情况。我也写过留言板,加入了很完善的广告过滤机制,比如说,留言中不包含中文,或者包含2个以上的http等等就认为是广告,的确也起到了作用,自己测试也一切正常。但是随后,依旧有大量的垃圾广告留言,我百思不得其解,这些广告是怎么发上去的呢?按照广告内容我手动实验输入是不能发上去的。难道直接写数据库?这个在随后也否定了,我检查了数据库,所有写入内容均是正常的。这下我真的不知道哪里出了问题,搜索了半天也没搜索到结果 阅读全文
posted @ 2011-09-22 11:13 李sir 阅读(792) 评论(0) 推荐(0) 编辑

摘要:现在拥有QQ的人已经很多了,而且不少人同时拥有几个账号,遗憾的是QQ只能设置一个号码自动登录,如果想同时登录几个账号那么必须一个一个手动输入,因此,网上也出现了不少QQ自动登录器,这究竟是怎么实现的呢?其实原理非常简单。QQ是支持命令行登录的,也就是说QQ的exe程序支持参数,下面举一个参数登录的例子:e:\qq\qq.exe /START QQUIN:00000000 PWDHASH:4QrcORm6Wau+VuBX9g+IPg== /STAT:41比如有上面这个参数,前面的e:\qq\qq.exe是QQ的程序路径,/START QQUIN:是保留字段,后面紧跟的就是需要登录的QQ号码,PW 阅读全文
posted @ 2011-09-22 11:03 李sir 阅读(6571) 评论(6) 推荐(0) 编辑

摘要:真是越来越喜欢C#的强大和易用了,上次给大家介绍了一个C#打造QQ自动登录的小程序,这次再给大家介绍一个更好玩的小程序:气泡屏幕保护!首先说一下制作要点:1 窗口要全屏置顶 2 模拟气泡的滚动和粘滞效果 3 支持快捷键ESC退出大致就是这3个要点了,其他还有一些细节我们在程序中根据需要再看,OK,开工!首先是全屏置顶,因为是屏幕保护嘛,这个简单,在窗体的属性设置里把FormBorderStyle设置为none表示无边框,把ShowInTaskbar设置为false表示不在任务栏出现,最后一个把WindowState设置为Maximized表示最大化即可,当然可以设置TopMost为true让窗 阅读全文
posted @ 2011-09-22 10:56 李sir 阅读(2392) 评论(1) 推荐(0) 编辑

摘要:HWND hWorker,hRebar,hComEx,hcom,hEdit; HWND hwndParent=::FindWindow( "IEFrame ",NULL);//找到IE窗口 char szError[260]; hWorker=FindWindowEx(hwndParent,0, "WorkerA ",NULL);//找到工作区窗口(不是internet explorer server窗口) hRebar=FindWindowEx(hWorker,0, "ReBarWindow32 ",NULL);//找到Rebar窗 阅读全文
posted @ 2011-09-22 10:45 李sir 阅读(3192) 评论(0) 推荐(1) 编辑

摘要:1、弹出式广告框也是IE浏览窗口,一般来说,它是一个无菜单、无工具栏窗口。所以可以在桌面上打开一个窗口时,首先判断该窗口类型是否是“IEFrame”,接着判断IEFrame的子窗口类型“WorkerW”的属性是否是不可见(这是一般弹出式广告窗口的特征),这样就可以向该窗口发出关闭的消息,以上步骤一般能自动关闭大部分弹出广告框。 2、通过WINDOWS编程中的钩子(HOOK)函数解决截获在桌面上打开窗口的消息。钩子函数的基本原理就是对WINDOWS系统的某些动作注册,当发生这些事件时首先调用预先设置的回调函数,回调函数处理后,再由原来的函数处理。这里回调函数的作用正是实现1中叙述的功能。因为.. 阅读全文
posted @ 2011-09-22 10:31 李sir 阅读(1325) 评论(1) 推荐(0) 编辑

摘要:今天用asio写一个简单的server时,当连接成功时做如下工作Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1asio::async_read(socket_,asio::buffer(&m_packet,sizeof(m_packet)),2boost::bind(&tcp_connection::HandleReadCardKey,shared_from_this(),3asio::placeholders::erro 阅读全文
posted @ 2011-09-09 14:19 李sir 阅读(9908) 评论(0) 推荐(0) 编辑

摘要:shared_from_this()是enable_shared_from_this<T>的成员 函数,返回shared_ptr<T>。首先需要注意的是,这个函数仅在shared_ptr<T>的构造函数被调用之后才能使 用。原因是enable_shared_from_this::weak_ptr并不在构造函数中设置,而是在shared_ptr<T>的 构造函数中设置。 如下代码是错误的:class D:public boost::enable_shared_from_this<D>{public: D() { boost::share 阅读全文
posted @ 2011-09-09 13:54 李sir 阅读(14352) 评论(1) 推荐(3) 编辑

摘要:首先#include <gtest/gtest.h>,当然工程的头文件路径要设置正确1.简单测试TESTCpp代码#include <gtest/gtest.h> int Factorial( int n ) { if(n==2) return 100; //故意出个错,嘻嘻 return n<=0? 1 : n*Factorial(n - 1); } //用TEST做简单测试 TEST(TestFactorial, ZeroInput) //第一个参数是测试用例名,第二个参数是测试名:随后的测试结果将以"测试用例名.测试名"的形式给出 { E 阅读全文
posted @ 2011-09-09 10:07 李sir 阅读(1997) 评论(0) 推荐(0) 编辑

摘要:bind并不是一个单独的类或函数,而是非常庞大的家族,依据绑定的参数个数和要绑定的调用对象类型,总共有十个不同的形式,但它们的名字都叫bind. bind接受的第一个参数必须是一个可调用对象f,包括函数,函数指针,函数对象和成员函数,之后bind接受最多9个参数,参数的数量必须与f的参数数量相等 _1,_2这些一直可以到9,是占位符,必须在绑定表达式中提供函数要求的所有参数,无论是真实参数还是占位符均可以。占位符不可以超过函数参数数量。 绑定普通函数: C++代码 #include<boost/bind.hpp> #include<iostream> usingname 阅读全文
posted @ 2011-09-07 14:32 李sir 阅读(9528) 评论(2) 推荐(1) 编辑

摘要:以boost::function和boost:bind取代虚函数boost::function和boost::bind已经纳入了std::tr1,这或许是C++0x最值得期待的功能,它将彻底改变C++库的设计方式,以及应用程序的编写方式。Scott Meyers的Effective C++ 3rd ed.第35条款提到了以boost::function和boost:bind取代虚函数的做法,这里谈谈我自己使用的感受。基本用途boost::function就像C#里的delegate,可以指向任何函数,包括成员函数。当用bind把某个成员函数绑到某个对象上时,我们得到了一个closure(闭包) 阅读全文
posted @ 2011-09-07 13:25 李sir 阅读(1084) 评论(1) 推荐(0) 编辑

摘要:当我们使用函数时习惯于C函数的格式,即如下形式resulttype funname( arglist );返回值类型 函数名( 参数列表 );在Boost.Function中,我们可以方便的定义定义函数对象。不过在定义用来表示类成员函数的函数对象时第一个参数是类指针。而且在调用时,要传入一个类实例的指针。这样用起来并不是很方便,因为调用者要知道类实例。这实际上没有实现解耦。而解耦是我们使用回调或委托设计的一个目标。为了解决这个问题,我们要使用Boost.Bind库Boost.Bind是一个函数对象工厂。他用来产生我们需要的函数对象。好了,有了它,你可以在你设计中大量使用Boost.Functi 阅读全文
posted @ 2011-09-01 15:54 李sir 阅读(814) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示