最近

很久没写博客了,不过其实知道这个blog的人并不多,相对来说我还是比较喜欢自娱自乐,清静点好

最近学习也很忙,自己现在也还差很多,还要继续努力

最近把博客优化了下,访问速度提高了少许,作为一个处女座也看的比较舒服

一些文章里有wooyun上的图片现在也看不了了,有时间处理下

好了,晚安

初识Erlang

前言


为什么突然会写这个东西233呢,前段时间微博转发抽奖抽中了本书《Erlang趣学指南》今天刚收到(这是我第一次抽中书呀hha),翻了翻感觉开启了另一个新世界的大门。学习不同的编程语言其实给人感觉是一件有意思的事,重点不在于不同的语法和符号,而是一种学习不同思考方式的过程。现在学习编程语言个人感觉越来越成为一种预测未来发展趋势的行为,大部分人都会选择现在热门的语言,当然同时也有许多新型or非热门语言逐渐开始兴起,值得高兴的事Erlang正是一门优秀的面向并发的编程语言,虽然小众不易维护。当然它独特的概念与其他语言非常不同,语法也看起来比较奇怪,不过这也是他本身特性所需。从某种意义上来说Erlang不只是一门编程语言,更是一个系统平台。

so,我今天也就大致看了看前几页,所以下面就大致介绍一下我初次了解的Erlang

介绍


Erlang是一种通用的面向并发的编程语言,使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断 的情况下更新。另外如果需要更高效的话,字节代码也可以编译成本地代码运行。

特点

● 并发性 – Erlang支持超大量级的并发进程,并且不需要操作系统具有并发机制。
● 分布式 – 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点)
● 健壮性 – Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。
● 软实时性- Erlang支持可编程的“软”实时系统,使用了递增式垃圾收集技术。
● 热代码升级-Erlang允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间,新旧代码是共存的。
●递增式代码装载-用户能够控制代码如何被装载的细节。
●外部接口-Erlang进程与外部世界之间的通讯使用和在Erlang进程之间相同的消息传送机制。
●Fail-fast(中文译为速错),即尽可能快的暴露程序中的错误。
●面向并发的编程(COP concurrency-oriented programming)
●函数式编程
●动态类型
●及早求值或严格求值
●脚本语言
优缺点
“Erlang 是动态类型的语言,因而不能进行静态分析,所生成的文档也不包含有助于理解的类型信息”——这是惯常的看法,广为流行,而且被看作是 Erlang 在开发大型系统时的一个短板(大型系统意味着更强烈的静态分析需求和更严重的依赖文档进行沟通)。

然而 Erlang 是一个有着 20 多年历史的成熟系统,它早已发展出了一套自己的类型标注系统,不仅用来生成文档,更重要的是可以据此对源码进行静态分析,通过程序来排除一些低级的和隐藏的错误。在这方面, Erlang OTP 的源码本身及其文档就是最好的例子。在 《Erlang 程序设计》的附录A部分,对于这个系统的使用已经进行了充分的说明。

Erlang

  • 最简洁精练的分布式模型
  • Node, Process, Mail (Message)
  • 最优雅的错误处理模型:速错(Fail fast)
  • 如果出现任何异常,立即死掉
  • GenServer编程框架
  • 程序代码风格完全一致,便于交流
  • 轻量级的进程
  • 可以尽可能地按照正常的业务逻辑去设计,而不是过多地考虑硬件环境的制约。
  • 热部署(Hot swap)
  • 变量不可变
  • 更容易写出可靠的程序。也利于事务性代码的编写。
  • 当然这是一把双刃剑。它也改变了你的编程习惯。

(参考:http://www.cnblogs.com/dasea/archive/2012/08/18/2644927.html)


多了解一些东西没什么坏处,不是吗:)

所以要等,所以要忍

所以要等,所以要忍,一直要到春天过去,到灿烂平息,到雷霆把他们轻轻放过,到幸福不请自来,才笃定,才坦然,才能在街头淡淡一笑。春有春的好,春天过去,有过去的好。

——《我们的她们》

Install Docker for Windows

最近准备装东西需要用到docker,由于电脑win8所以到官方看了看文档安装下,最后发现给的装下的似乎没带python,导致程序运行不动…比较坑了,最近快开学了不搞了233,以后有时间再翻翻官方文档吧233


Windows users use Docker Toolbox to install Docker software. Docker Toolbox includes the following Docker tools:

  • Docker CLI client for running Docker Engine to create images and containers
  • Docker Machine so you can run Docker Engine commands from Windows terminals
  • Docker Compose for running the docker-compose command
  • Kitematic, the Docker GUI
  • the Docker QuickStart shell preconfigured for a Docker command-line environment
  • Oracle VM VirtualBox

Because the Docker Engine daemon uses Linux-specific kernel features, you can’t run Docker Engine natively in Windows. Instead, you must use the Docker Machine command, docker-machine, to create and attach to a small Linux VM on your machine. This VM hosts Docker Engine for you on your Windows system.

Step 1: Check your version

To run Docker, your machine must have a 64-bit operating system running Windows 7 or higher. Additionally, you must make sure that virtualization is enabled on your machine. To verify your machine meets these requirements, do the following:

  1. Right click the windows message and choose System.

    If you aren’t using a supported version, you could consider upgrading your operating system.

    If you have a newer system, specifically 64bit Windows 10 Pro, with Enterprise and Education (1511 November update, Build 10586 or later), consider using Docker for Windows instead. It runs natively on the Windows, so there is no need for a pre-configured Docker QuickStart shell. It also uses Hyper-V for virtualization, so the instructions below for checking virtualization will be out of date for newer Windows systems. Full install prerequisites are provided in the Docker for Windows topic in What to know before you install.

  2. Make sure your Windows system supports Hardware Virtualization Technology and that virtualization is enabled.

    For Windows 8 or 8.1

    Choose Start > Task Manager and navigate to the Performance tab. Under CPU you should see the following:

    Release page

    If virtualization is not enabled on your system, follow the manufacturer’s instructions for enabling it.

    For Windows 7

    Run the Microsoft® Hardware-Assisted Virtualization Detection Tool and follow the on-screen instructions.

  3. Verify your Windows OS is 64-bit (x64)

How you do this verification depends on your Windows version. For details, see the Windows article How to determine whether a computer is running a 32-bit version or 64-bit version of the Windows operating system.

Step 2: Install Docker Toolbox

In this section, you install the Docker Toolbox software and several “helper” applications. The installation adds the following software to your machine:

  • Docker Client for Windows
  • Docker Toolbox management tool and ISO
  • Oracle VM VirtualBox
  • Git MSYS-git UNIX tools

If you have a previous version of VirtualBox installed, do not reinstall it with the Docker Toolbox installer. When prompted, uncheck it.

If you have Virtual Box running, you must shut it down before running the installer.

  1. Go to the Docker Toolbox page.
  2. Click the installer link to download.
  3. Install Docker Toolbox by double-clicking the installer.

    The installer launches the “Setup – Docker Toolbox” dialog.

    If Windows security dialog prompts you to allow the program to make a change, choose Yes. The system displays the Setup – Docker Toolbox for Windowswizard.

    Release page

  4. Press Next to accept all the defaults and then Install.

    Accept all the installer defaults. The installer takes a few minutes to install all the components:

  5. When notified by Windows Security the installer will make changes, make sure you allow the installer to make the necessary changes.

    When it completes, the installer reports it was successful:

    Success

  6. Uncheck “View Shortcuts in File Explorer” and press Finish.

Step 3: Verify your installation

The installer places Docker Toolbox and VirtualBox in your Applications folder. In this step, you start Docker Toolbox and run a simple Docker command.

  1. On your Desktop, find the Docker Toolbox icon.

    Desktop

  2. Click the icon to launch a Docker Toolbox terminal.

    If the system displays a User Account Control prompt to allow VirtualBox to make changes to your computer. Choose Yes.

    The terminal does several things to set up Docker Toolbox for you. When it is done, the terminal displays the $ prompt.

    Desktop

    The terminal runs a special bash environment instead of the standard Windows command prompt. The bash environment is required by Docker.

  3. Make the terminal active by click your mouse next to the $ prompt.

    If you aren’t familiar with a terminal window, here are some quick tips.

    /Terminal shell

    The prompt is traditionally a $ dollar sign. You type commands into the command line which is the area after the prompt. Your cursor is indicated by a highlighted area or a | that appears in the command line. After typing a command, always press RETURN.

  4. Type the docker run hello-world command and press RETURN.

    The command does some work for you, if everything runs well, the command’s output looks like this:

原文:https://docs.docker.com/toolbox/toolbox_install_windows/

PE文件小记

PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)


一个可执行文件不光包括二进制的机器代码,还有许多其他信息如字串符,字体,图标等。PE文件格式规定了所有这些信息在可执行文件中如何组织。

PE文件格式把可执行文件分成若干个数据节,不同资源放在不同节中。

一个典型的pe文件中包含的节如下:

.text 由编译器产生,存放二进制的机器代码,也是我们反汇编和调试的对象

.data 初始化的数据块,如宏定义、全局变量、静态变量等

.idata 可执行文件所使用的动态链接库等外来函数与文件的信息

.rsrc 存放程序的资源,如图标、菜单等

(参考:《0day:软件漏洞分析技术》)

PE文件的结构一般如下图

  • DOS头是用来兼容MS-DOS操作系统的,目的是当这个文件在MS-DOS上运行时提示一段文字,大部分情况下是:This program cannot be run in DOS mode.还有一个目的,就是指明NT头在文件中的位置。
  • NT头包含windows PE文件的主要信息,其中包括一个‘PE’字样的签名,PE文件头(IMAGE_FILE_HEADER)和PE可选头(IMAGE_OPTIONAL_HEADER32),头部的详细结构以及其具体意义在PE文件头文章中详细描述。
  • 节表:是PE文件后续节的描述,windows根据节表的描述加载每个节。
  • 节:每个节实际上是一个容器,可以包含代码、数据等等,每个节可以有独立的内存权限,比如代码节默认有读/执行权限,节的名字和数量可以自己定义,未必是上图中的三个。

(来源:http://blog.csdn.net/evileagle/article/details/11693499)

数据结构——线性表杂记

数据结构——线性表杂记


什么是线性表

线性表是一种常用的数据结构,表示元素之间一对一的相邻关系。在实际应用中,线性表都是以栈、队列、字符串、数组等特殊线性表的形式来使用的。

线性表是具有相同数据类型的n (n>=0)个数据元素的有限序列。其中n为表长,当n=0 时该线性表是一个空表。若用L命名线性表,则其一般表示如下: L=(a1, a2, …, ai, ai+1, …, an)

其中,a1是唯一的“第一个”数据元素,又称为表头元素;an是唯一的“最后一个”数据元素,又称为表尾元素。除第一个元素外,每个元素有且仅有一个直接前驱。除最后一个元素外,每个元素有且仅有一个直接后继。以上就是线性表的逻辑特性,这种线性有序的逻辑结构正是线性表名字的由来。

由此,我们得出线性表的特点如下:

  • 表中元素的个数有限。
  • 表中元素具有逻辑上的顺序性,在序列中各元素排序有其先后次序。
  • 表中元素都是数据元素,每一个表元素都是单个元素。
  • 表中元素的数据类型都相同。这意味着每一个表元素占有相同数量的存储空间。
  • 表中元素具有抽象性。就是说,仅讨论表元素之间的逻辑关系,不考虑元素究竟表示什么内容。

三种特殊线性表

  1. 队列

从数据结构角度看,栈和队列是操作受限的线性表,它们的逻辑结构相同

串是重要的非数值处理对象,它是以字符作为数据元素的线性表

//这里我们主要讨论下栈与队列概念/区别

  • 栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表。

如:在建筑工地上,使用的砖块从底层一层一层向上放,使用时从最上面一层一层的拿。所以为后进先出。

  • 队列(Queue)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。

如:在生活中排队上车,排队的规则是不允许插队,后来的人需要站在队尾,每次总是对头先上车。所以为先进先出。

栈和队列是在程序设计中被广泛使用的两种线性数据结构,它们的特点在于基本操作的特殊性,必须按后进先出的规则进行操作,而队列必须按先进先出的规则进行操作。和线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构。可将线性表和栈及队列的插入和删除操作对比如下:

线性表

如线性表允许在表内任一位置进行插入和删除

而栈只允许在表尾一端进行插入和删除

队列

队列只允许在表尾一端进行插入,在表头一端进行删除

END

学习哇

参考: 百度/谷歌 (ง •̀_•́)ง

 

S2-032 远程命令执行 (POC@Tangscan)

前段时间很火的S2-032 远程命令执行