信息收集與系統(tǒng)攻擊之緩沖區(qū)溢出基本概念
2.溢出攻擊
1)緩沖區(qū)溢出基本概念
緩沖區(qū):緩沖區(qū)也稱堆棧,是一種抽象的數(shù)據(jù)結(jié)構(gòu),物理上就是一段連續(xù)分配的內(nèi)存空間。堆( heap)和棧(stack)是不同的兩個概念,堆是由程序申請并釋放的內(nèi)存空間,而棧是由操作系統(tǒng)自動分配的內(nèi)存空間。堆棧有兩個特點,一數(shù)據(jù)操作(壓棧( push)和出棧( pop))遵循“后進先出”原則,就象往有底的竹筒里面放乒乓球,最后放進去的必須最先取出來。二是堆棧的增長方向與內(nèi)存地址增長方向相反,也就是堆棧是從內(nèi)存的高地址向低地址增長的。
指針:編程語言中的一個對象,是一個內(nèi)存地址。
寄存器:有限存貯容量的高速存貯部件,它們可用來暫存指令、數(shù)據(jù)和地址。以X86 32位CPU為例,其通常包含8個通用寄存器和1個指令指針寄存器。8個通用寄存器分別是EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP和指令指針寄存器EIP。其中ESP和EBP被稱為堆棧指針寄存器,在一個函數(shù)中,ESP和EBP共同決定了一個堆棧,其中ESP指向棧頂, EBP指向棧底。而指令指針寄存器(EIP)作為馮。諾依曼計算機體系結(jié)構(gòu)的核心,其指向CPU要執(zhí)行的下一條指令的地址。
在堆棧分配中,其是從高往底分配內(nèi)存(注意:這和內(nèi)存從低往高分配的方式截然相反),并且遵循“后進先出”的原則。堆棧涉及壓棧( push)和出棧(pop)兩種操作,堆棧的棧頂位置由寄存器ESP指定,壓棧時,ESP=ESP-4,同時在ESP處存放需要壓人堆棧的數(shù)據(jù);出棧時,ESP=ESP+4,原先的棧頂數(shù)據(jù)將不再屬于堆棧范圍之內(nèi),即相當于數(shù)據(jù)出棧了。