<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[FlowShell的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/FlowShell</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; FlowShell]]></copyright><item><title><![CDATA[windows PE文件结构及其加载机制]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/78417585</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/78417585</guid><author>FlowShell</author><pubDate>Wed, 01 Nov 2017 19:33:50 +0800</pubDate><description><![CDATA[1. 概述

PE文件的全称是Portable Executable，意为可移植的可执行的文件，常见的EXE、DLL、OCX、SYS、COM都是PE文件，PE文件是微软Windows操作系统上的程序文件（可能是间接被执行，如DLL）。它是1993年Windows NT系统引入的新可执行文件格式，到现在已经经过20多年了。虽然使用PE作为可执行文件格式的Windows操作系统已经更换了很多版本，]]></description><category></category></item><item><title><![CDATA[SharedUserData]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/52216165</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/52216165</guid><author>FlowShell</author><pubDate>Tue, 16 Aug 2016 00:27:03 +0800</pubDate><description><![CDATA[SharedUserData 是操作系统为每个进程提供的个共享数据结构，里面存放有很多重要的系统信息，如TickCount、系统时间、SystemRoot等。。。

其在DDK定义为：

代码:
#define KI_USER_SHARED_DATA        0xffdf0000
#define SharedUserData  ((KUSER_SHARED_DATA * cons]]></description><category></category></item><item><title><![CDATA[虚函数HOOK]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/52216098</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/52216098</guid><author>FlowShell</author><pubDate>Tue, 16 Aug 2016 00:19:24 +0800</pubDate><description><![CDATA[看来一些资料，觉得这篇写的比较好，做此笔记。
栗子如下：

#pragma once
#include 
using namespace std;

class A
{
public:
	int iVal1;
	int iVal2;

	virtual void print1()
	{
		cout<<"iVal1(A) = "<<iVal1<<endl;
	}

	virtual void]]></description><category></category></item><item><title><![CDATA[Inline Hook]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/52094035</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/52094035</guid><author>FlowShell</author><pubDate>Tue, 02 Aug 2016 15:08:26 +0800</pubDate><description><![CDATA[一、 什么是 inline hook
inline hook 就是在运行的流程中插入跳转指令（call/jmp）来抢夺程序运行流程的一个方法。
好了那么问题就来了：
1. 插入怎么样的跳转指令
    一般为 相对JMP(0xE9) + 4字节地址，方便计算 
        公式：源地址 + 相对偏移 = 目的地址
        公式：目的地址 - 源地址 = 相对偏移

2.]]></description><category></category></item><item><title><![CDATA[应用层HOOK技术的一些简单总结]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/52081661</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/52081661</guid><author>FlowShell</author><pubDate>Sun, 31 Jul 2016 23:17:42 +0800</pubDate><description><![CDATA[在Window平台上开发任何稍微底层一点的东西，基本上都是Hook满天飞， 普通应用程序如此，安全软件更是如此， 这里简单记录一些常用的Hook技术。


SetWindowsHookEx
基本上做Windows开发都知道这个API， 它给我们提供了一个拦截系统事件和消息的机会， 并且它可以将我们的DLL注入到其他进程。
但是随着64位时代的到来和Vista之后的UAC机制开启，这个AP]]></description><category></category></item><item><title><![CDATA[PE文件结构详解-PE导入表]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/52081647</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/52081647</guid><author>FlowShell</author><pubDate>Sun, 31 Jul 2016 23:16:45 +0800</pubDate><description><![CDATA[PE文件结构详解（二）可执行文件头的最后展示了一个数组，PE文件结构详解（三）PE导出表中解释了其中第一项的格式，本篇文章来揭示这个数组中的第二项：IMAGE_DIRECTORY_ENTRY_IMPORT，即导入表。

也许大家注意到过，在IMAGE_DATA_DIRECTORY中，有几项的名字都和导入表有关系，其中包括：IMAGE_DIRECTORY_ENTRY_IMPORT，IMAGE_D]]></description><category></category></item><item><title><![CDATA[IAT HOOK]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/52081374</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/52081374</guid><author>FlowShell</author><pubDate>Sun, 31 Jul 2016 22:41:24 +0800</pubDate><description><![CDATA[iat hook，也就是修改导入表实现函数调用的hook（运行时hook本进程）。注：iat(import address table,导入函数地址表，在这里说明一下：导入表是image import table,导入函数地址表是 image import address table,这是两个不同的pe文件中的表)
 要实现iat hook，首先得清楚iat和导入表的结构。pe文件中，不管是在硬]]></description><category></category></item><item><title><![CDATA[objective-C中的Class(类类型),Selector(选择器SEL),函数指针(IMP)]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/51771996</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/51771996</guid><author>FlowShell</author><pubDate>Mon, 27 Jun 2016 22:55:25 +0800</pubDate><description><![CDATA[今天在园子里看到了一篇牛文“Objective-C
 2.0 with Cocoa Foundation--- 5，Class类型，选择器Selector以及函数指针 ”，讲得十分精彩，忍不住把它的代码加上注释整理于此，以便日后查看。

个人体会：obj-C中的“Class类型变量”比c#中的Object基类还要灵活，可以用它生成任何类型的实例（但是它又不是NSObject）。而选择器SEL]]></description><category></category></item><item><title><![CDATA[OC定义类的和方法]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/51771912</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/51771912</guid><author>FlowShell</author><pubDate>Mon, 27 Jun 2016 22:45:48 +0800</pubDate><description><![CDATA[// Person.h

// 这里声明的方法都是public的
@interface Person : NSObject
{
    // 默认为protected
    int n1;
    
@protected
    int n2;
    
@private
    int n3;

@public
    int n4;
}

// @propery：声明setter/gette]]></description><category></category></item><item><title><![CDATA[iOS开发之xib技巧介绍]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/51771638</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/51771638</guid><author>FlowShell</author><pubDate>Mon, 27 Jun 2016 21:56:16 +0800</pubDate><description><![CDATA[iOS开发的这些年里，有的人用代码创建UI，有的人用xib创建UI。到底是用xib还是代码来创建UI,这个问题以前也有过很多争论，我只想说一点，各有各的优点。如果能够将两者融合贯通，那将是更有优势。笔者开发过程中，UI能用xib就尽量用xib（能用storyboard就用storyboard, 一个storyboard里最好别装太多的UIViewController，这在结队开发中将不利）。本文主]]></description><category></category></item><item><title><![CDATA[IOS创建UI的方式]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/51661560</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/51661560</guid><author>FlowShell</author><pubDate>Tue, 14 Jun 2016 00:51:49 +0800</pubDate><description><![CDATA[学习IOS之处，不知道如何创建UI，现记录几种方式方便后续查看
1.不使用ViewController直接创建，如下：

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWin]]></description><category></category></item><item><title><![CDATA[代码手写UI，xib和StoryBoard间的博弈，以及Interface Builder的一些小技巧]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/51649408</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/51649408</guid><author>FlowShell</author><pubDate>Sun, 12 Jun 2016 22:16:55 +0800</pubDate><description><![CDATA[代码手写UI，xib和StoryBoard间的博弈，以及Interface Builder的一些小技巧



最近接触了几个刚入门的iOS学习者，他们之中存在一个普遍和困惑和疑问，就是应该如何制作UI界面。iOS应用是非常重视用户体验的，可以说绝大多数的应用成功与否与交互设计以及UI是否漂亮易用有着非常大的关系。而随着iOS开发发展至今，可以说在UI制作上大家逐渐分化为了三种主要流派：使用]]></description><category></category></item><item><title><![CDATA[ViewController生命周期详解]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/51649324</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/51649324</guid><author>FlowShell</author><pubDate>Sun, 12 Jun 2016 22:00:28 +0800</pubDate><description><![CDATA[在我之前的学习笔记中讨论过ViewController，过了这么久，对它也有了新的认识和体会，ViewController是我们在开发过程中碰到最多的朋友，今天就来好好认识一下它。ViewController是iOS开发中MVC模式中的C，ViewController是view的controller，ViewController的职责主要包括管理内部各个view的加载显示和卸载，同时负责与其他Vi]]></description><category></category></item><item><title><![CDATA[iOS应用程序生命周期(前后台切换,应用的各种状态)详解]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/51649237</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/51649237</guid><author>FlowShell</author><pubDate>Sun, 12 Jun 2016 21:48:45 +0800</pubDate><description><![CDATA[链接如下：
点击打开链接]]></description><category></category></item><item><title><![CDATA[Window下开发环境安装和Hello World]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/44516213</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/44516213</guid><author>FlowShell</author><pubDate>Sat, 21 Mar 2015 15:38:32 +0800</pubDate><description><![CDATA[Objective-C是在C语言的基础上的扩展，是一种面向对象的编程语言。这里假设读者有面向对象的编程基础。

1. 下载并安装开发环境 

到http://www.gnustep.org/experience/Windows.html下载以下四个文件：





Package
Required?
Stable
Unstable
Notes




GNUs]]></description><category></category></item><item><title><![CDATA[STL函数对象之自定义函数对象]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/43734149</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/43734149</guid><author>FlowShell</author><pubDate>Wed, 11 Feb 2015 14:58:25 +0800</pubDate><description><![CDATA[如何定义自己的函数对象，它使用于任何的绑定器
要定义自己的绑定器要满足一定的条件：必须提供参数和返回值的类型。
STL为我们提供了两个结构体：
template 
struct unary_function {
typedef Arg argument_type;
typedef Result result_type;
};
template 
struct binary_fun]]></description><category></category></item><item><title><![CDATA[STL函数对象之预定义函数对象和函数对象绑定器]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/43734063</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/43734063</guid><author>FlowShell</author><pubDate>Wed, 11 Feb 2015 14:57:35 +0800</pubDate><description><![CDATA[STL为我们定义了一些常用的函数对象，如下表。

函数绑定器是函数对象，它能结合函数对象、于特定值或函数在一起使用。它们也是被定义在
. 看下面的例子：
find_if (coll.begin(),coll.end(), bind2nd (greater(),42))。
这个例子bind2nd把greater()于42结合起来用来检查大于42的值。
下面是STL为我们定义的函数绑定器：]]></description><category></category></item><item><title><![CDATA[STL函数对象2]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/43734051</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/43734051</guid><author>FlowShell</author><pubDate>Wed, 11 Feb 2015 14:53:04 +0800</pubDate><description><![CDATA[看下面的例子：
class IntSequence {
private:
int value;
public:
IntSequence (int initialValue): value(initialValue) {}
int operator() () {return value++;}
};
list coll;
generate_n (back_inserter(coll]]></description><category></category></item><item><title><![CDATA[STL函数对象]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/43734043</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/43734043</guid><author>FlowShell</author><pubDate>Wed, 11 Feb 2015 14:52:39 +0800</pubDate><description><![CDATA[函数是这样一个Object：它定义了operator（）操作。例如：
class FunctionObjectType {
public:
void operator() {
statements
}
}
这样的定义有三个重要的优点：
1.       如果它又一个状态它会更加智能，事实上你可以在同一个函数中有两个实例，这两个实例可以用同一个恶有多个状态的函数对表示。
2.   ]]></description><category></category></item><item><title><![CDATA[STL迭代器之迭代器绑定器：Iterator Traits]]></title><link>https://blog.youkuaiyun.com/FlowShell/article/details/43734033</link><guid>https://blog.youkuaiyun.com/FlowShell/article/details/43734033</guid><author>FlowShell</author><pubDate>Wed, 11 Feb 2015 14:52:07 +0800</pubDate><description><![CDATA[Iterators有不同的类型，每种类型都代表着不同的能力，它在重载某个行为时，是有用的，甚至有必要。通过iterators tags和iterator traits 重载可以实现。对于么一个iterator类型STL都提供一个terator
 tag，这个terator
 tag能被做一个’table”.
namespace std {
struct output_iterator_ta]]></description><category></category></item></channel></rss>