免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1408 | 回复: 2
打印 上一主题 下一主题

[内核入门] 问个菜鸟级的问题,关于main()的地址。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-03 17:06 |只看该作者 |倒序浏览
#include <stdio.h>

int main()
{
    printf("main():%p %p\n", __builtin_return_address(0), main);
    return 0;
}

w@RD-Compiler-Server:~/working$ ./main
main():0xb75efca6 0x80483c4

相差这么大。
0x80483c4相信是正常的代码段地址,
0xb75efca6是怎么得到的?

论坛徽章:
0
2 [报告]
发表于 2012-05-03 18:32 |只看该作者
本帖最后由 hauto 于 2012-05-03 18:33 编辑

汇编了一把,发现 0xb75efca6 是执行时当前函数栈地址.

(gdb) disassemble
Dump of assembler code for function main:
0x080483b4 <main+0>:    lea    0x4(%esp),%ecx
0x080483b8 <main+4>:    and    $0xfffffff0,%esp
0x080483bb <main+7>:    pushl  -0x4(%ecx)
0x080483be <main+10>:   push   %ebp
0x080483bf <main+11>:   mov    %esp,%ebp
0x080483c1 <main+13>:   push   %ecx
0x080483c2 <main+14>:   sub    $0x14,%esp
0x080483c5 <main+17>:   mov    0x4(%ebp),%eax        //这个就是__builtin_return_address(0)
0x080483c8 <main+20>:   movl   $0x80483b4,0x8(%esp)
0x080483d0 <main+28>:   mov    %eax,0x4(%esp)
0x080483d4 <main+32>:   movl   $0x80484c0,(%esp)
0x080483db <main+39>:   call   0x80482f0 <printf@plt>
0x080483e0 <main+44>:   mov    $0x0,%eax
0x080483e5 <main+49>:   add    $0x14,%esp
0x080483e8 <main+52>:   pop    %ecx
0x080483e9 <main+53>:   pop    %ebp
0x080483ea <main+54>:   lea    -0x4(%ecx),%esp
0x080483ed <main+57>:   ret
End of assembler dump.

论坛徽章:
0
3 [报告]
发表于 2012-05-03 19:03 |只看该作者
明白了,谢谢。

原来我一直理解错了__builtin_return_address();  0实际上就是0x4(%ebp), 我一直以为是函数地址+当前代码的偏移。。那个0xbxxxxxxx的地址是

b7e7c000-b7fbc000 r-xp 00000000 08:01 2207597    /lib/i686/cmov/libc-2.11.3.so
b7fbc000-b7fbd000 ---p 00140000 08:01 2207597    /lib/i686/cmov/libc-2.11.3.so
b7fbd000-b7fbf000 r--p 00140000 08:01 2207597    /lib/i686/cmov/libc-2.11.3.so
b7fbf000-b7fc0000 rw-p 00142000 08:01 2207597    /lib/i686/cmov/libc-2.11.3.so

是这个了,此时

main():0xb7e92ca6 0x80483e2
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP