关于MAP文件的小问题

幽幽浮浮 2012-10-11 06:36:36
同样的控制台HelloWorld程序,VC++6.0和VC++2010编译出来的MAP文件中,main函数的入口地址,用Windbg中下断点,VC++6.0的可以成功,VC++2010的地址总不成功。这是为什么呢?

VC++2010的编译器在链接时篡改了入口地址吗?有什么说法没?
...全文
165 7 打赏 收藏 转发到动态 举报
写回复
用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文件的问题?

21,453

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧