*.map文件

    关于linux程序的map文件,网络上资料很少,大概看了下map文件,虽然理解的不是很透彻,但是还是对程序的编译、运行、内存分配有了一点新的认识。

    1). map文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法,是整个程序工程信息的静态文本,通常由linker生成。(抄至网络)
    map文件保存整个工程的静态文本信息,里面有所有函数的入口地址。
    通过查看map文件,我们可以找到代码段(.text),全局未初始化区(.bss),数据段(.data),还有些不懂的.pdata、.edata、.rsrc、.stab等。
    (编译原理是硬伤,有时间一定要学学。)

    2). linux下编译生成map文件
    g++ -g  mapFile.cpp -Wl,-Map,mapFile.map

    3). map文件的作用是,我们可以根据程序产生错误地址在map文件中找到相应的函数、变量地址。
    在这里,我有一个疑问: 一直以为程序编译后的地址为逻辑地址(段选择符+偏移地址),根据段选择符找到段基址、加上偏移地址才得到线性地址,但是在map文件中得到的却是线性地址。
    为什么会是这样呢?网上找到个答案,但不敢完全认同。
    Linux中逻辑地址等于线性地址。为什么这么说呢?因为Linux所有的段(用户代码段、用户数据段、内核代码段、内核数据段)的线性地址都是从 0x00000000 开始,长度4G,这样 线性地址=逻辑地址+ 0x00000000,也就是说逻辑地址等于线性地址了。 

    还是有很多的疑惑和不确定,暂且记录下来,待我知识体系完善了,再来更新吧。

    结论:去学习、思考、实践、创新,否则只能生活在自以为是的那么一个小圈子里自“愚”自乐。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值