盾怪网教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

编写自己的缓冲区溢出使用程序

时间:2024/10/30作者:未知来源:盾怪网教程人气:

[摘要](内存低址) 各寄存器的状况: (gdb) i reg eax 0x10 16 ecx 0x400 1024 edx 0x4010a980 1074833792 ebx 0x4010c1ec 107...
 
(内存低址) 

各寄存器的状况: 
(gdb) i reg 
eax 0x10 16 
ecx 0x400 1024 
edx 0x4010a980 1074833792 
ebx 0x4010c1ec 1074840044 
esp 0xbffff6a0 -1073744224 
ebp 0xbffff6ac -1073744212 
esi 0x4000ae60 1073786464 
edi 0xbffff704 -1073744124 
eip 0x8048427 134513703 
eflags 0x296 662 
(以下省略) 
... 

请注意: 此时esp的内容为0xbffff6a0, ebp的内容为0xbffff6ac 
单步运行leave指令, 然后看一下寄存器的情况. 
(gdb) si 
0x8048428 in vulFunc () 
(gdb) i reg 
eax 0x10 16 
ecx 0x400 1024 
edx 0x4010a980 1074833792 
ebx 0x4010c1ec 1074840044 
esp 0xbffff6b0 -1073744208 
ebp 0xbffff6b8 -1073744200 
esi 0x4000ae60 1073786464 
edi 0xbffff704 -1073744124 
eip 0x8048428 134513704 
eflags 0x396 918 
(以下省略) 
... 

此时的esp的内容为0xbffff6b0, 即执行leave指令前的ebp内容0xbffff6ac+4; 
ebp的内容为0xbffff6b8, 这个值从那来的呢? 看一下此时进程在内存中的影像, 正好是 
vulFunc函数的ebp指向的内存的内容, 而随着这个值的出栈, esp的值正好为0xbffff6b0. 

由此可见, leave指令其实等价于 
mov %ebp,%esp 
pop %ebp 
这两条指令, 正好和刚进入被调用函数时 
push %ebp 
mov %esp,%ebp 
这两条指令的功能相反. 
也就是说leave指令抛弃了被调用函数的栈帧, 恢复了调用函数的栈帧. 

此时栈中相关的内容: 
(gdb) x/11x $esp 
0xbffff6b0: 0x08048443 0xbffff856 0xbffff6d8 0x400349cb 
0xbffff6c0: 0x00000002 0xbffff704 0xbffff710 0x40013868 
0xbffff6d0: 0x00000002 0x08048350 0x00000000 

进程在内存中的相关影像: 

(内存高址) 

关键词:编写自己的缓冲区溢出运用程序




Copyright © 2012-2018 盾怪网教程(http://www.dunguai.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版