| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2651 人关注过本帖
标题:用gdb分析C的时候,碰到ebp寄存器,不太明白它到底指向哪里
只看楼主 加入收藏
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
结帖率:98.63%
收藏
已结贴  问题点数:10 回复次数:12 
用gdb分析C的时候,碰到ebp寄存器,不太明白它到底指向哪里
用的是intel语法,我想用gdb分析C 程序,关键就是我不明白ebp寄存器是怎么一回事
我明白ebp是为了参照函数中局部变量的,
eip是下一条要执行語句的地址

有一程序stack_example.c

#include<stdio.h>
void test_function(int a, int b, int c, int d) {
    int flag;
    char buffer[10];

    flag = 6;
    buffer[0] = 'A';
}

int main(void) {
    test_function(1,2,3,4);
}

$ gcc -g stack_example.c    编译
   
$ gdb -q ./a.out    安静模式

(gdb) disass main
Dump of assembler code for function main:
   0x08048433 <+0>:    push   %ebp
   0x08048434 <+1>:    mov    %esp,%ebp
   0x08048436 <+3>:    and    $0xfffffff0,%esp
   0x08048439 <+6>:    sub    $0x10,%esp
   0x0804843c <+9>:    movl   $0x4,0xc(%esp)
   0x08048444 <+17>:    movl   $0x3,0x8(%esp)
   0x0804844c <+25>:    movl   $0x2,0x4(%esp)
   0x08048454 <+33>:    movl   $0x1,(%esp)
   0x0804845b <+40>:    call   0x8048404 <test_function>
   0x08048460 <+45>:    leave  
   0x08048461 <+46>:    ret   
End of assembler dump.


(gdb) disass test_function
Dump of assembler code for function test_function:
   0x08048404 <+0>:    push   %ebp
   0x08048405 <+1>:    mov    %esp,%ebp
   0x08048407 <+3>:    sub    $0x28,%esp
   0x0804840a <+6>:    mov    %gs:0x14,%eax
   0x08048410 <+12>:    mov    %eax,-0xc(%ebp)
   0x08048413 <+15>:    xor    %eax,%eax
   0x08048415 <+17>:    movl   $0x6,-0x1c(%ebp)
   0x0804841c <+24>:    movb   $0x41,-0x16(%ebp)

   0x08048420 <+28>:    mov    -0xc(%ebp),%eax
   0x08048423 <+31>:    xor    %gs:0x14,%eax
   0x0804842a <+38>:    je     0x8048431 <test_function+45>
   0x0804842c <+40>:    call   0x8048340 <__stack_chk_fail@plt>
   0x08048431 <+45>:    leave  
   0x08048432 <+46>:    ret   
End of assembler dump.
(gdb)

我明白stack 是从高位向低位伸展
heap是从低位向高位伸展
不明白的就是出现 ebp的那几行
0x08048415 <+17>:    movl   $0x6,-0x1c(%ebp)
0x0804841c <+24>:    movb   $0x41,-0x16(%ebp)
搜索更多相关主题的帖子: void eip 寄存器 
2012-01-13 01:36
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:2 
楼主我们一起去学汇编吧 嘎嘎.

梅尚程荀
马谭杨奚







                                                       
2012-01-13 01:39
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 2楼 有容就大
呵呵,也没有了,最近在看 Hacking: The art of exploitation, 2nd edition
第二章主要是用gdb分析C 看到好多地址啊,好多地址啊!!
然后就晕了

The quieter you become, the more you can hear
2012-01-13 01:42
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:2 
你得知道CPU是咋工作的?汇编也有语法的

总有那身价贱的人给作业贴回复完整的代码
2012-01-13 01:45
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 4楼 embed_xuel
拿书乱啃就是,不会就上来问你们这些高手啊。

梅尚程荀
马谭杨奚







                                                       
2012-01-13 01:51
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 3楼 madfrogme
我学到结构体和指针就感觉飘啊飞啊,没汇编估计要丢根。一阵风就不见了。

梅尚程荀
马谭杨奚







                                                       
2012-01-13 01:53
cuijingchun
Rank: 3Rank: 3
来 自:黑龙江
等 级:论坛游侠
威 望:1
帖 子:108
专家分:186
注 册:2011-9-28
收藏
得分:2 
学汇编和学C 要一起学吗??

为自己喜欢游戏做一个自动打怪的程序QQ: 7325231    YY4350晚上编程课欢迎大家来听
2012-01-13 06:32
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 7楼 cuijingchun
我到汇编吧去逛了下,他们有的还说你要是学汇编最好能学下C,这样效果更好。

梅尚程荀
马谭杨奚







                                                       
2012-01-13 10:25
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:2 
ebp是基址指针寄存器,用于存储新栈的基地址。局部变量的地址即是通过ebp加偏移量来定义的。

重剑无锋,大巧不工
2012-01-13 12:25
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 9楼 beyondyf
新栈的基地址应该是一个高位的地址吧,因为看偏移量都是负值

The quieter you become, the more you can hear
2012-01-13 12:49
快速回复:用gdb分析C的时候,碰到ebp寄存器,不太明白它到底指向哪里
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023129 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved