自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (11)
  • 收藏
  • 关注

原创 C++独孤九剑第一式——拨云见日(对象内存模型)

归妹趋无妄,无妄趋同人,同人趋大有。甲转丙,丙转庚,庚转癸。子丑之交,辰巳之交,午未之交。风雷是一变,山泽是一变,水火是一变。乾坤相激,震兑相激,离巽相激······好了,要背心法的同学请课后自行背诵。        特别说明:本系列并非严格按照《独孤九剑》的剑式进行命名,来学剑招的请自备传送卷轴,恕不报销往返机票。之所以称之为“拨云见日”,就是要在这招中和大家一起揭开C++对象内存的迷雾

2016-05-30 20:13:16 2824 2

原创 objective-c中category的底层实现

以下是在看完源码后我觉得最能说明问题的部分。首先是category结构体的定义:struct category_t { const char *name; classref_t cls; struct method_list_t *instanceMethods; struct method_list_t *classMethods; struct

2016-05-27 22:26:08 1537

原创 KVC/KVO底层实现原理

KVC: Key-value coding is a mechanism for indirectly accessing anobject’s attributes and relationships using string identifiers.所谓键值编码,并不是访问器方法的启动和实例变量的访问这种直接的方式,而是使用表示属性的字符串来间接访问对象属性值的一种结构。只要存在访问器

2016-05-27 17:15:57 5886 1

翻译 C++中的set_new_handler函数

首先,namespace std中有如下定义:  Typedef void  (*new_handler)();        new_handler  set_new_handler(new_handler  new_p) throw();//C++98        new_handler  set_new_handler (new_handler  new_p) noexcept

2016-05-25 22:11:13 18310 3

原创 objective-c中关联引用的底层实现

我们知道关联引用(associative  references)可以为已存在的实例对象增加实例变量。该技术主要由以下三个函数实现相应的功能:1.   void  objc_setAssociatedObject(id  object, void *key, id  value,objc_AssociationPolicy  policy)这个方法用于为对象object添加以key指定的地

2016-05-25 15:04:12 2380

原创 C语言宏操作之反复斟酌

一般我们在程序中使用宏主要是一下几种情况:1.   有些变量在程序的多处出现,我们希望统一进行管理。2.   定义一些类型简称,在使用时简化代码。3.   将一些简单的操作定义为宏,从而避免每次调用函数操作时造成系统效率下降。例如C中的getchar()、putchar(),就经常会被实现为宏。虽然宏非常有用,但是宏只是对程序的文本起作用。也就是说,宏提供了一种对组成C程序的字符进

2016-05-22 16:09:04 1375

原创 C语言变量内存分布

1.   首先,看一下内存中的分区情况:①堆区 : 一般由程序员手动分配释放 , 若程序员不释放,程序结束时将由OS回收。②栈区:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 ③全局区:全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(BSS)。  程序结束

2016-05-21 18:54:40 3087

原创 windows下的内联hook实现

HOOK技术正如其名,就像是代码中放下的一个“钩子”,它在静静地等待捕获系统中的某个消息或动作。在编程技术中,钩子技术在DOS时代就已经存在了。在windows下,钩子按照实现技术的不同和挂钩位置的不同,其种类也是越来越多,但是设置钩子的本质却是始终不变的。那么钩子究竟有什么用?它能干的事非常多,例如输入监控、API拦截、消息捕获、改变程序执行流程等。杀毒软件会用HOOK技术钩住一些API函数

2016-05-19 18:17:51 6304 5

原创 Windows下向指定窗口模拟发送键盘消息

在操作系统中,鼠标和键盘的操作会被转换为相应的系统消息,窗口过程在接收到消息后会进行对应的处理。发送消息,我们可以使用SendMessage()和PostMessage(),所以,只要使用这两个函数来发送鼠标和键盘的相关消息就可以了。此外,还可以通过keybd_event()和mouse_event()两个专用的函数进行鼠标和键盘按键的模拟操作。下面是一个简单的向指定窗口发送消息的例子:1

2016-05-18 21:10:24 27094 1

转载 深入理解RunLoop

原文链接:http://blog.ibireme.com/2015/05/18/runloop/RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。之后会介绍一下在 iOS 中,苹果是如何利用 RunLoop 实现自动释放池、延迟回调、触摸事件、屏幕刷新等功能的。Index

2016-05-18 12:03:06 1498

原创 objective-c中的self和super关键字

对于这两个关键字,最重要的是搞清楚两点:1.self是调用该方法的实体,是类中方法的隐藏变量(还有一个是_cmd代表被调用方法的selector),在调用时动态决议;2.super是“编译器指示符”,在编译时静态决议。super指的是从当前类的super class开始查找相应的selector,找到后让self来调用。注意:不是用superclass的对象来调用该selector。结

2016-05-17 22:03:44 1354

原创 iOS中pch文件和info.plist文件的作用

Xcode5与Xcode6以后的项目结构如下图:其中在Xcode6后已不再默认生成pch文件,下面介绍如何自己创建该文件。1.选中项目文件,右击鼠标选中新建文件:2.在Other项中,选择新建pch文件3.新建后需在工程中做相关配置,点击工程文件来到配置页:注意:默认选择项是“Basic”时,请手动切换到“All”,否则会看不到下面的配置

2016-05-17 16:59:41 1558

原创 UIApplication对象的生命周期事件及常用方法

每个iOS应用中都有且仅有一个UIApplication对象,该对象有程序自行创建,手动创建将会报错!例如UIApplication *app =[[UIApplication alloc] init];会报如下错误:Terminating app due to uncaught exception'NSInternalInconsistencyException', reason: 'There

2016-05-16 22:23:22 1599

原创 实现DLL的注入与卸载

在Windows系统下,为了避免各个进程相互影响,每个进程的地址空间都是被隔离的。在执行DLL注入时需要通过创建“远程线程”来实现。所谓“远程线程”,并不是跨计算机,而是跨进程的。简而言之,就是进程A在进程B中创建一个线程,这个线程就叫“远程线程”。要向其它进程中“注入”DLL就需要在目标进程中调用相应的API函数(LoadLibrary),可是目标进程不会自己“乖乖地”调用加载函数,这时候要

2016-05-15 19:10:53 9459 4

原创 使用C++操作mysql数据库

话不多说,直接进入主题。一.环境搭建本文所述是在32位win7,VS2013,mysql5.5下的实验情况,其它环境应该也是大同小异。首先,需要安装VS2013和mysql数据库。然后,打开VS2013开始配置mysql使用环境。1、新建win32控制台程序,此处就不多说了。2、在VS2013的菜单栏选择“项目——>属性”3、配置属性——>VC++目录——>包含目录

2016-05-15 11:49:19 2833 1

原创 DLL的简单实现及调用

DLL(Dynamic  Link Library,动态连接库)是一个可以被其他应用程序调用的应用模块,其中封装了可以被调用的资源或函数。DLL属于可执行文件,他符合Windows系统的PE文件格式,不过他的运行是依附于EXE文件创建的进程来执行的,不能单独运行。一个DLL文件可以被多个进程所装载调用。DLL是动态连接库,相对应的,是静态连接库。动态连接库是在EXE文件运行时被加载执行的,而静

2016-05-14 16:47:16 2768

原创 VS2013下boost环境的搭建

BOOST 编译过程比较复杂,目前为了学习 BOOST,首先得搭建BOOST 开发环境。本文中所描述的是在Windows2007的32位机下基于VS2013版本的搭建过程。首先,请自行下载boost相关安装程序。如果是 32 位,下载 boost_1_55_0-msvc-12.0-32.exe;否则, boost_1_55_0-msvc-12.0-64.exe。随后安装相应的程序,程序安装过程

2016-05-14 12:34:02 1737

原创 objective-c中的消息转发

将消息发送给没有实现该消息方法的对象时,通常会出现运行时错误。这时,我们可以将不能被处理的消息转送给其他对象,让其他对象来处理该消息。首先,将某消息发送到相应的接受者。如果接收者没有实现对应消息的相应方法,运行时系统会发送如下消息给接收者。- (void)forwardInvocation: (NSInvocation *)anInvocation这个方法在NSObject中定义,所有

2016-05-13 16:27:48 970

服务编程(blog)

API实现Windows下服务的控制

2016-07-12

注册表操作源码(blog)

注册表操作源码(blog)

2016-07-09

《深入浅出MFC》高清第二版(书签)

MFC内部机制及原理介绍。

2016-06-06

c++Boost教程

Boost使用教程。

2016-06-06

WINDOWS编程启示录

Windows编程技术的细节介绍

2016-05-29

DLL注入与卸载

实现window系统下的DLL注入与卸载

2016-05-22

空空如也

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

TA关注的人

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