社区
汇编语言
帖子详情
关于MAP文件的小问题
幽幽浮浮
2012-10-11 06:36:36
同样的控制台HelloWorld程序,VC++6.0和VC++2010编译出来的MAP文件中,main函数的入口地址,用Windbg中下断点,VC++6.0的可以成功,VC++2010的地址总不成功。这是为什么呢?
VC++2010的编译器在链接时篡改了入口地址吗?有什么说法没?
...全文
202
7
打赏
收藏
关于MAP文件的小问题
同样的控制台HelloWorld程序,VC++6.0和VC++2010编译出来的MAP文件中,main函数的入口地址,用Windbg中下断点,VC++6.0的可以成功,VC++2010的地址总不成功。这是为什么呢? VC++2010的编译器在链接时篡改了入口地址吗?有什么说法没?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
幽幽浮浮
2012-10-15
打赏
举报
回复
经过确认,的确是/DynamicBase链接属性导致。改为NO,编译后的入口地址即可正常下断了。
Areslee
2012-10-13
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
引用 3 楼 的回复:
是设置断点失败还是程序装载之后已经走过那个地址了?
---是设置端点失败。
因为我在vs环境中,调试执行,看到main函数的入口地址和MAP文件的地址就不同,每次都会变化。似乎随机映射的。
而调试执行看到的这个地址,在winDbg中下,就可以成功中断在main。
[/Quote]
这个你要看看你是不是在连接选项里设置了允许重定位
大熊猫侯佩
2012-10-13
打赏
举报
回复
编译器改main地址是有可能的,你断不到,看main地址是否变了
幽幽浮浮
2012-10-13
打赏
举报
回复
[Quote=引用 3 楼 的回复:]
是设置断点失败还是程序装载之后已经走过那个地址了?
[/Quote]---是设置端点失败。
因为我在vs环境中,调试执行,看到main函数的入口地址和MAP文件的地址就不同,每次都会变化。似乎随机映射的。
而调试执行看到的这个地址,在winDbg中下,就可以成功中断在main。
Areslee
2012-10-12
打赏
举报
回复
是设置断点失败还是程序装载之后已经走过那个地址了?
幽幽浮浮
2012-10-12
打赏
举报
回复
vc2010编译的map文件部分内容:
Address Publics by Value Rva+Base Lib:Object
0000:00000000 ___safe_se_handler_table 00000000 <absolute>
0000:00000000 ___safe_se_handler_count 00000000 <absolute>
0000:00000000 ___ImageBase 00400000 <linker-defined>
0001:00000000 __enc$textbss$begin 00401000 <linker-defined>
0001:00010000 __enc$textbss$end 00411000 <linker-defined>
0002:000003b0 _main
004113b0
f VC_ConsoleDemo.obj
0002:0000040e _printf 0041140e f MSVCRTD:MSVCR100D.dll
0002:00000420 __RTC_CheckEsp 00411420 f MSVCRTD:_stack_.obj
0002:00000450 @_RTC_CheckStackVars@8 00411450 f MSVCRTD:_stack_.obj
0002:000004d0 @_RTC_AllocaHelper@12 004114d0 f MSVCRTD:_stack_.obj
0002:00000510 @_RTC_CheckStackVars2@12 00411510 f MSVCRTD:_stack_.obj
VC6.0编译的map文件部分内容:
Address Publics by Value Rva+Base Lib:Object
0001:00000010 _main
00401010
f DebugDemo.obj
0001:00000040 _printf 00401040 f LIBCD:printf.obj
0001:000000c0 __chkesp 004010c0 f LIBCD:chkesp.obj
0001:00000100 _mainCRTStartup 00401100 f LIBCD:crt0.obj
红色的就是bp不成功的地址,但蓝色的却可以。
Areslee
2012-10-11
打赏
举报
回复
会不会是manifest文件的问题?
json-lib-2.4 jar 程序
文件
json jar 包,java 开发Ajax ,封装json格式的jar包工具
map
文件
粗略分析
Map
文件
就是MCU程序的
Map
(地图)。 我们编写好的代码,通过编译链接一系列动作后,会生成一个elf格式的
文件
,从这个elf
文件
可以生成一个hex或者bin
文件
,以供烧录到MCU里面去运行,同时(可配置地)生成一个叫
Map
的
文件
。 这个elf
文件
实际上就包含了程序的各种信息,包括函数名、变量名,地址、大小等等非常丰富的信息。而这个
map
文件
就是从elf提出取来的,非常直观地(以文本形式)展现程序中的各
文件
包含了哪些函数变量,而这些函数变量分配在哪些段,地址是什么,以及其占用的空间大小等。
map
文件
包含
*.
map
文件
关于linux程序的
map
文件
,网络上资料很少,大概看了下
map
文件
,虽然理解的不是很透彻,但是还是对程序的编译、运行、内存分配有了一点新的认识。 1)
map
文件
是程序的全局符号、源
文件
和代码行号信息的唯一的文本表示方法,是整个程序工程信息的静态文本,通常由linker生成。(抄至网络)
map
文件
保存整个工程的静态文本信息,里面有所有函数的入口地址。 通过查看
map
文件
,我
map
文件
的使用
开始接触
MAP
文件
是在学习DSP时,后来发现微软PC下也存在
MAP
文件
,所以查资料了解了下,记录一下方便大家和自己查看。 首先说下TI DSP中的
MAP
文件
:
MAP
文件
是CCS软件编译后产生的有关DSP用到所有程序、数据及IO空间的一种映射
文件
。 一、生成方法
MAP
文件
主要有两种生成方法,一种是由系统自动生成,默认
文件
名为所建立的项目名(如XXX为项目名)加上.m
STM32
map
文件
解析
什么是
map
文件
? 简单的说:
map
文件
是通过编译器编译之后,集程序、数据及IO空间的一种映射
文件
。 Keil生成
map
文件
的设置如下图所示: 生成
文件
保存路径与Listings选择路径相同。 keil 主要包含配置: Memory
Map
:内存映射 Callgraph:图像映射 Symbols:符号 Cross Reference:交叉引用 Size Info:大小信息 Totals Info:统计信息 Unused Section Info:未调用模块信息 Veneers Info:装饰信息 【如何查
汇编语言
21,496
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章