分享
 
 
 

Java入门:缓冲区溢出编程心得

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

前言:网上关于缓冲区溢出的资料也有很多,但我在阅读过程中发现介绍的都不是很明了,而且各网站也只是转贴老外的那篇译文而已,不仅内容有缺损,而且程序也无法调通,因为GCC版本不一样.经过几天的琢磨,终于明白了真正的原理,特地写出来分享.

测试环境:

$ gcc -v

Reading specs from /usr/lib/gcc-lib/i386-redhat-Linux/3.2.3/specs

Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --host=i386-redhat-linux

Thread model: posix

gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-24)

$ gdb -v

GNU gdb Red Hat Linux (6.0post-0.20031117.6rh)

Copyright 2003 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are

welcome to change it and/or distribute copies of it under certain conditions.

Type "show copying" to see the conditions.

There is absolutely no warranty for GDB. Type "show warranty" for details.

This GDB was configured as "i386-redhat-linux-gnu".

$ uname -a

Linux candy 2.4.21-9.EL #1 Thu Jan 8 17:03:13 EST 2004 i686 athlon i386 GNU/Linux

实例:

网上和我的这个实例雷同的也有,但是他们的是无法正确实现的.因为要害的跳转代码没有计算正确.(GCC版本问题,呵呵)

/************

* a.c

************/

void function(void)

{

char buffer[5];

int* ret;

ret=buffer+28;

(*ret)+=10;

}

void main()

{

int x;

x=0;

function();

x=1;

printf("%d\n",x);

return;

}

/*end*/

懂C语言的人都会认为最后的输出结果是1,可惜输出结果为0.为什么呢?请听解释.

实例分析:

相关堆栈的基础知识我就不罗嗦了,网上的介绍很多.

要害问题在于如何确定源代码

ret=buffer+28;

(*ret)+=10;

中的28 和 10

编译(会有warning,不用管他.)

$gcc -g -o a a.c //加上-g 用来在gdb中调试

$gdb a

(gdb)disas main //得到反汇编代码 如下:

Dump of assembler code for function main:

0x08048366 : push %ebp

0x08048367 : mov %esp,%ebp

0x08048369 : sub $0x8,%esp

0x0804836c : and $0xfffffff0,%esp

0x0804836f : mov $0x0,%eax

0x08048374 : sub %eax,%esp

0x08048376 : movl $0x0,0xfffffffc(%ebp)

0x0804837d : call 0x8048348

0x08048382 : movl $0x1,0xfffffffc(%ebp)

0x08048389 : sub $0x8,%esp

0x0804838c : pushl 0xfffffffc(%ebp)

0x0804838f : push $0x8048474

0x08048394 : call 0x8048288

0x08048399 : add $0x10,%esp

0x0804839c : leave

0x0804839d : ret

End of assembler dump.

(gdb)disas function

Dump of assembler code for function function:

0x08048348 : push %ebp

0x08048349 : mov %esp,%ebp

0x0804834b : sub $0x28,%esp

0x0804834e : lea 0xffffffe8(%ebp),%eax

0x08048351 : add $0x1c,%eax

0x08048354 : mov %eax,0xffffffe4(%ebp)

0x08048357 : mov 0xffffffe4(%ebp),%edx

0x0804835a : mov 0xffffffe4(%ebp),%eax

0x0804835d : mov (%eax),%eax

0x0804835f : add $0xa,%eax

0x08048362 : mov %eax,(%edx)

0x08048364 : leave

0x08048365 : ret

End of assembler dump.

可以得知当main中执行 0x0804837d : call 0x8048348 <

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有