免费注册 查看新帖 |

Chinaunix

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

linux程序调试中如何根据ELF文件定位源程序的位置? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-05-31 16:16 |只看该作者 |倒序浏览
linux程序调试中如何在ELF文件中的符号表等信息定位源程序的位置?
比如a.c,b.c编译,联接为一个d.elf。
我在a.c中第15行打上一个断点,那么怎么在d.elf中定位这个断点是在目标文件代码段的哪个位置?

即如何从源代码定位信息(文件名+行号或者函数名)得到目标码的起始地址以及终止地址?

请教各位朋友?

论坛徽章:
0
2 [报告]
发表于 2004-06-01 09:48 |只看该作者

linux程序调试中如何根据ELF文件定位源程序的位置?

编译的时候加上-g
调试的时候,目录里要有源代码文件.

论坛徽章:
0
3 [报告]
发表于 2004-06-01 10:19 |只看该作者

linux程序调试中如何根据ELF文件定位源程序的位置?

调试的使用我是知道的
最近研究调试器GDB,所以上来问问以下这个调试机相关的理论
如何从源代码定位信息(文件名+行号或者函数名)得到目标码的起始地址以及终止地址?

希望哪位大侠可以从原理方面谈谈。

论坛徽章:
0
4 [报告]
发表于 2004-06-01 13:20 |只看该作者

linux程序调试中如何根据ELF文件定位源程序的位置?

你试试:
cc -g -S -o 1.s xxx.c
cc -S -o 2.s xxx.c

看看1.s/2.s两个中间文件的差别就看出来了.

论坛徽章:
0
5 [报告]
发表于 2004-06-04 17:07 |只看该作者

linux程序调试中如何根据ELF文件定位源程序的位置?

谢谢版本的回答,非常感谢!
但是还是有一点不懂,-g生成了许多调试信息,不知道怎么映射到源代码文件上?版主能否再讲仔细点,谢谢!
比如
int func(int n)
{
  int i;
  i=n+1;
}
对应于
func:
.LFB2:
        .file 1 "test.c"
        .loc 1 2 0
        @ args = 0, pretend = 0, frame = 8
        @ frame_needed = 1, uses_anonymous_args = 0
        mov        ip, sp
.LCFI0:
        stmfd        sp!, {fp, ip, lr, pc}
.LCFI1:
        sub        fp, ip, #4
.LCFI2:
        sub        sp, sp, #8
.LCFI3:
        str        r0, [fp, #-16]
        .loc 1 4 0
        ldr        r3, [fp, #-16]
        add        r3, r3, #1
        str        r3, [fp, #-20]
        .loc 1 5 0
        mov        r0, r3
        sub        sp, fp, #12
        ldmfd        sp, {fp, sp, pc}
.LFE2:
        .size        func, .-func
        .align        2
        .global        main
        .type        main, %function
是怎么映射的?

论坛徽章:
0
6 [报告]
发表于 2004-06-11 14:21 |只看该作者

linux程序调试中如何根据ELF文件定位源程序的位置?

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP