摘要: 开篇先补充一个知识点,就是比如我建立一个文件之后,使用git add就会生成一个git对象,但是git对象生成后可以在.git/objects里面对应,首先我们来初始化一个仓库git init。 $ git init 然后我们来创建两个文件文件名分别为a和b。 $ touch a b 将a文件添加到暂存区,然后再将b添加到暂存区,我们会想到这时候有两个git对象产生,但是git对象对应.git/objects文件。 $ git add . $ find .git/objects/ .git/objects/ .git/objects/e6 .git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 .git/objects/info .git/objects/pack 我们来查看下.git/objects文件下面会产生几条git对象库。这时候超出了我们想象,我们认为对象文件也应该创建两个但是仅仅创建了一个,这是为什么呢?那么着一个文件又指的是什么呢? $ git cat-file -t e6 阅读全文
posted @ 2016-01-14 15:19 BattleHeart 阅读(5196) 评论(1) 推荐(3) 编辑
摘要: 一、撤销指令 git checkout还原工作区的功能 git reset 还原暂存区的功能 git clean 还没有被添加进暂存区的文件也就是git还没有跟踪的文件可以使用这个命令清除他们 git revert 撤销本次提交。 二、指令讲解 Git checkout 首先我们对文件的一个修改,对master.txt进行了修改 阅读全文
posted @ 2016-01-14 08:48 BattleHeart 阅读(1683) 评论(6) 推荐(2) 编辑
摘要: 1.初始化一个仓库 git init git clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 Git 中; 第二种是从一个服务器克隆一个现有的 Git 仓库 git init –bare git 创建一个裸仓库 2.git仓库有三个区域 工作区working directory日常编辑代码的地方 历史仓库history repository是commit指向的一个树形结构 暂存区Staging area相当于是工作区与历史提交中间的缓存,它代表着是你要提交代码的一个工作状态,它维护的是一个虚拟的树形结构 阅读全文
posted @ 2016-01-13 19:37 BattleHeart 阅读(4972) 评论(2) 推荐(3) 编辑
摘要: 配置提交代码的信息,例如是谁提交的代码之类的。 git config –global user.name BattleHeaert 这里是设置提交代码的人的名称 git config –global user.email github@126.com 这里是设置提交代码的人的邮箱 查看当前的用户名 git config user.name 或者 git config –get user.name 这时候会显示BattleHeart这个用户名,但是如果我们再添加一个用户的名称的时候这时候就会显示最后一个添加的用户名 git config –global –add user.name BH 当我们再次使用git config user.name时这时候显得是就是BH如下图所示 阅读全文
posted @ 2016-01-13 13:00 BattleHeart 阅读(2187) 评论(1) 推荐(2) 编辑
摘要: RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。 RabbitMQ是由RabbitMQ Technologies Ltd开发并且提供商业支持的。该公司在2010年4月被SpringSource(VMWare的一个部门)收购。在2013年5月被并入Pivotal。其实VMWare,Pivotal和EMC本质上是一家的。不同的是VMWare是独立上市子公司,而Pivotal是整合了EMC的某些资源,现在并没有上市。 RabbitMQ的官网是http://www.rabbitmq.com 花絮:本篇文章是一个系列的文章,本片是开篇,后续会 阅读全文
posted @ 2016-01-07 09:25 BattleHeart 阅读(126447) 评论(26) 推荐(55) 编辑
摘要: 内存的不同用途   根据不同的操作系统,一个进程可能被分配到不同的内存区域去执行。但是不管什么样的操作系统、什么样的计算机架构,进程使用的内存都可以按照功能大致分为以下4个部分:   (1)代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并执行。   (2)数据区:用于存储全局变量等。   (3)堆区:进程可以在堆区动态地请求一定大小的内存,并在用完之后归还给堆区。动态分配和回收是堆区的特点。   (4)栈区:用于动态地存储函数之间的关系,以保证被调用函数在返回时恢复到母函数中继续执行。   在Windows平台下,高级语言写出的程序经过编译链接,最终会变成PE文件。当PE文件被装载运行后,就成了所谓的进程。 阅读全文
posted @ 2015-04-12 15:59 BattleHeart 阅读(29924) 评论(21) 推荐(16) 编辑
摘要: 我们接着上面的栈溢出原理来进行讲解栈溢出的利用,首先我们不会接着上一篇的文章的例子来进行讲解,我会再写一个C语言的例子来进行讲解。再进行讲一遍栈溢出的原理。更加熟悉栈溢出的原理能够让我们更好地利用栈溢出。 下面的例子代码如下:(代码很简单我不做解释) 阅读全文
posted @ 2015-04-08 22:44 BattleHeart 阅读(11217) 评论(6) 推荐(4) 编辑
摘要: 什么是栈? 栈是一种机制,计算机用它来将参数传递给函数,也可以用于放入局部函数变量,函数返回地址,它的目的是赋予程序一个方便的途径来访问特定函数的局部数据,并从函数调用者那边传递信息。栈的作用如同一个缓冲区,保存着函数所需的所有信息。在函数的开始时候产生栈,并在函数的结束时候释放它。栈一般是静态的,也意味着一旦在函数的开始创建一个栈,那么栈就是不可以改变的。栈所有保存的数据是可以改变的,但是栈的本身一般是不可以改变的。 缓冲溢出分为两种,一种是栈溢出,一种是堆溢出。 如何找到栈? EIP:扩展指令指针。在调用函数时,这个指针被存储在栈中,用于后面的使用。在函数返回时,这个被存储的地址被用于决定下一个将被执行的指令的地址。 ESP:扩展栈指针。这个寄存器指向栈的当前位置,并允许通过使用push和pop操纵或者直接的指针操作来对栈中的内容进行添加和移除。 EBP:扩展基指针。这个寄存器在函数的执行过程中通常是保持不变的。它作为一个静态指针使用,用于只想基本栈的信息,例如,使用了偏移量的函数的数据和变量。这个指针通常指向函数使用栈底部。 阅读全文
posted @ 2015-04-08 14:25 BattleHeart 阅读(11478) 评论(13) 推荐(6) 编辑
摘要: 最近经常用到替换的东西所以就出来整理下,这里要分享的是正则表达式里面的替换原则,首先要声明的是这里提及到的替换原则是.NET里面的正则表达式的替换原则。先看一下替换的定义替换是只能在替换模式中识别的语言元素。 它们使用正则表达式模式定义全部或部分用于替换输入字符串中的匹配文本的文本。 替换模式可以包含一个或多个替换以及本文字符。其实个人总结的替换的大致是这样的,替换的内容永远都是原文本的内容,通过正则表达式匹配出来文本,来通过组名或者组号来进行对原文本的替换,替换的位置是用正则表达式匹配出来的内容。还有我已经在前面写了三篇关于正则的文章了,最近用到替换内容,详细分享来~,好了,废话不多说了下面进入正题吧~ 阅读全文
posted @ 2014-11-13 11:32 BattleHeart 阅读(50193) 评论(7) 推荐(10) 编辑
摘要: 首先写在前面,这篇文章源于个人的研究和探索,由于.NET有自己的反射机制,可以清楚的将源码反射出来,这样你的软件就很容易被破解,当然这篇文章不会说怎么样保护你的软件不被破解,相反是借用一个软件来讲述是怎么被攻破的,也会有人说这是一篇破文,我其实这篇文章已经写了很长时间了,不知道以什么形式发出来,因为毕竟是有些破解类的东西。但是我觉得从这篇文章相反的是能够带来一些启发。大家应该都知道Reflector这个反编译软件还有一个插件是专门用来改IL的插件叫Reflexil,这里我们也要用到前面那个工具Reflector,后面的插件我们这里我们不用,接下来分析的东西可以让大家能够更深入.NET的PE,深入内幕来看看,好,闲话少说….直接上分析。 阅读全文
posted @ 2014-11-10 14:49 BattleHeart 阅读(7183) 评论(9) 推荐(10) 编辑