YiMiTuMi

使我进步的不是谦虚,而是别人羡慕我时我的那份骄傲!

ShellCold简介

c++

ShellCode 借鉴:ShellCode 调用函数时会call,在call的之前会push函数的参数,call时回将函数要执行的下一条地址入栈,而ret会通过pop出这条地址进行返回,即可以通过修改这条地址从而达到调用其他函数的目的。 #include "stdafx.h" #include <string> #include <windows.h> us...

(二十九) 内中断--汇编笔记

汇编语言

内中断 任何一种通用的CPU,都具备,可以在执行完当前正在执行的指令之后,检测到从CPU外部发送过来的或内部产生的一种特殊信息,并且可以立即对所接受到的信息进行处理。这种特殊的信息,我们可以称其为:中断信息。 中断的意思是指,CPU不再接着(刚执行完的指令)向下执行,而是转去处理这个特殊信息。 “中断信息”是要求CPU马上进行某种处理,并向所要进行的该种处理提供了必备的参数的通知信息。...

(二十六)标志寄存器(flag)--汇编笔记

汇编语言

标志寄存器(flag) CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理机,个数和结构都有可能不同)具有以下3种作用。  1)用来存储相关指令的某些执行结果。  2)用来为CPU执行相关指令提供行为依据。  3)用来控制CPU的相关工作方式。 这种特殊的寄存器在8086CPU中,被称为标志寄存器。8086的标志寄存器有16位,其中状态的信息通常被称为程序状态字(PSW)。 ...

(二十八) CMP 指令(比较指令)--汇编笔记

汇编语言

CMP 指令(比较指令) cmp是比较指令,cmp的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。 cmp 指令格式: cmp 操作对象1, 操作对象2 功能: 操作对象1 - 操作对象2 计算操作对象1 - 操作对象2但并不保存结果,仅仅根据计算结果对标志寄存器进行设置。 比如: ...

(二十七)adc 指令和 sbb 指令--汇编笔记

汇编语言

adc 指令 adc是带进位加法指令,它利用了CF位上记录的进位值。 指令格式: adc 操作对象1, 操作对象2 功能: 操作对象1 = 操作对象1 + 操作对象2 + CF 比如: adc ax, bx (ax) = (ax) + (bx) + CF 例: mov ax, 2 mov bx, 1 sub bx, ax //向高位借位CF = 1 adc ax, ...

(二十五)数值显示和除法溢出问题--汇编笔记

汇编语言

解决除法溢出问题 例: mov bh, 1 mov ax, 1000 div bh 进行8位除法,结果商为1000,而1000在al中放不下。 在使用div指令做除法的时候,很可能发生:结果的商过大,超出了寄存器所能储存的范围。当CPU执行div等除法指令的时候,如果发生这样的情况,将引发CPU的一个内部错误,这个错误被称为:除法溢出。 子程序描述: 名称:divdw 功...

关于指针

c++

指针的类型 ClassTypePointer *px; //类对象指针 int *pi; Array<string> *pta; 以内存需求的观点来说,它们三个没有什么不同。它们三个都需要有足够的内存来放置一个机器地址(通常是一个 word)。 “指向不同类型之各指针”间的差异,既不在起指针表示法不同,也不在其内容(代表一个地址)不同,而是在其所寻址出来的 objec...

(二十四)call 指令及应用--汇编笔记

汇编语言

call指令 CPU执行call指令时,进行两步操作:  1)将当前的IP或CS和IP压入栈中。  2)转移。 call指令不能实现短转移,除此之外,call指令实现转移的方法和jmp的原理相同。 压栈一次存放2个字节,也就是用2个字节来存放IP或着CS,同时存放IP和CS一共占4个字节。一般都保存在低地址位。 比如: push IP 此时栈内ss:[0EH]保存IP的数据...

(二十三)ret 和 retf 指令--汇编笔记

汇编语言

ret 和 retf ret 指令用栈中的数据,修改IP的内容,从而实现近转移。 retf 指令用栈中的数据,修改CS和IP的内容,从而实现远转移。高位为CS(段地址 ),低位为IP(偏移地址)。入栈要先入CS的地址。 CPU执行ret指令时: (IP) = ((ss) * 16 + (sp)) (sp) = (sp) + 2 相当于: pop IP CPU执行retf指...

(二十二)jmp jcxz loop 转移指令 和 offset 指令--汇编笔记

汇编语言

转移指令原理 可以修改IP,或同时修改CS和IP的指令统称为转移指令。 转移指令就是可以控制CPU执行内存中某处代码的指令。 8086CPU的转移行为有以下几类:  1)只修改IP时,称为段内转移,比如:jmp ax。  2)同时修改CS和IP时,称为段间转移(远转移),比如:jmp 1000:0。 由于转移指令对IP的修改范围不同,段内转移又分为:短转移和近转移。  1)短转...