Visual Studio(2022)生成链接过程的.map映射文件以及.map映射文件的内容说明

这篇具有很好参考价值的文章主要介绍了Visual Studio(2022)生成链接过程的.map映射文件以及.map映射文件的内容说明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微软的官方说明

/MAP(生成映射文件) | Microsoft Learn

设置步骤

        1. 右键项目属性, 连接器 -> 常规 -> 启用增量链接,设置为否。如下图:

Visual Studio(2022)生成链接过程的.map映射文件以及.map映射文件的内容说明,c++/c/asm,windows,visual studio,ide,c++

        2. 连接器 -> 调试

                生成调试信息  设置为 生成调试信息 (/DEBUG)

                生成程序数据库文件  设置为 指定路径文件名,默认系统会自动设置

                生成映射文件  设置为  是 (/MAP)

                映射文件名  设置为 指定的完整路径, 例如 $(OutDir)$(TargetName).map 或者 aaa/Debug/test.map

                具体如下图:

                Visual Studio(2022)生成链接过程的.map映射文件以及.map映射文件的内容说明,c++/c/asm,windows,visual studio,ide,c++

                重新生成项目,成功生成,如下图所示:

Visual Studio(2022)生成链接过程的.map映射文件以及.map映射文件的内容说明,c++/c/asm,windows,visual studio,ide,c++

部分.map文件示例内容如下所示:

demo_ccwindows

 Timestamp is 64eed0a8 (Wed Aug 30 13:16:24 2023)

 Preferred load address is 0000000140000000

 Start         Length     Name                   Class
 0001:00000000 00003290H .text$mn                CODE
 0001:00003290 00000040H .text$mn$00             CODE
 0001:000032d0 00000090H .text$x                 CODE
 0002:00000000 00000240H .idata$5                DATA
 0002:00000240 00000038H .00cfg                  DATA
 0002:00000278 00000008H .CRT$XCA                DATA
 0002:00000280 00000008H .CRT$XCAA               DATA
 0002:00000288 00000008H .CRT$XCZ                DATA
 0002:00000290 00000008H .CRT$XIA                DATA
 0002:00000298 00000008H .CRT$XIAA               DATA
 0002:000002a0 00000008H .CRT$XIAC               DATA
 0002:000002a8 00000008H .CRT$XIZ                DATA
 0002:000002b0 00000008H .CRT$XPA                DATA
 0002:000002b8 00000008H .CRT$XPZ                DATA
 0002:000002c0 00000008H .CRT$XTA                DATA
 0002:000002c8 00000008H .CRT$XTZ                DATA
 0002:000002d0 00000000H .gehcont$y              DATA
 0002:000002d0 00000000H .gfids$y                DATA
 0002:000002d0 00000ab0H .rdata                  DATA
 0002:00000d80 00000080H .rdata$CastGuardVftablesA DATA
 0002:00000e00 00000080H .rdata$CastGuardVftablesC DATA
 0002:00000e80 00000080H .rdata$voltmd           DATA
 0002:00000f00 00000360H .rdata$zzzdbg           DATA
 0002:00001260 00000008H .rtc$IAA                DATA
 0002:00001268 00000008H .rtc$IMZ                DATA
 0002:00001270 00000008H .rtc$IZZ                DATA
 0002:00001278 00000008H .rtc$TAA                DATA
 0002:00001280 00000008H .rtc$TMZ                DATA
 0002:00001288 00000008H .rtc$TZZ                DATA
 0002:00001290 0000042cH .xdata                  DATA
 0002:000016bc 00000000H .edata                  DATA
 0002:000016bc 0000003cH .idata$2                DATA
 0002:000016f8 00000018H .idata$3                DATA
 0002:00001710 00000240H .idata$4                DATA
 0002:00001950 0000059eH .idata$6                DATA
 0003:00000000 00020060H .data                   DATA
 0003:00020060 00000620H .bss                    DATA
 0004:00000000 00000468H .pdata                  DATA
 0005:00000000 00000060H .rsrc$01                DATA
 0005:00000060 00000180H .rsrc$02                DATA

  Address         Publics by Value              Rva+Base               Lib:Object

 0000:00000000       __AbsoluteZero             0000000000000000     <absolute>
 0000:00000000       ___safe_se_handler_count   0000000000000000     <absolute>
 0000:00000000       ___safe_se_handler_table   0000000000000000     <absolute>
 0000:00000000       __arm64x_extra_rfe_table   0000000000000000     <absolute>
 0000:00000000       __arm64x_extra_rfe_table_size 0000000000000000     <absolute>
 0000:00000000       __arm64x_native_entrypoint 0000000000000000     <absolute>

        有了这些信息,之后就可以通过.map文件查看编译生成的代码细节,以及分析相关程序问题。       

Rva: relative virtual address

关于.map文件结构的细节示例说明

Start

Length

Name

Class

0001:

00000000

00000304H

.text

CODE

       PE 格式 - Win32 apps | Microsoft Learn

      PE 格式 - Win32 apps | Microsoft Learn

     .debug 段,在对象文件中用于包含编译器生成的调试信息,在映像文件中用于包含生成的所有调试信息。 本段说明如何在对象和映像文件中打包调试信息。PE 格式 - Win32 apps | Microsoft Learn

     .bss 段(Block Started by Symbol segment), 未初始化数据(自由格式),一般在初始化时bss 段部分将会清零。bss段属于静态内存分配,即程序一开始就将其清零了。这里主要存放没有初始化的全局变量或者初始化为0值的全局变量。

     .sbss 段,用于存放 near ptr 寻址或者叫相对寻址的未初始化数据。

     .text 端,存放执行程序的代码。

     .data 段,初始化数据(自由格式),保存已经初始化的全局变量。

     .rdata 段,保存已经初始化的只读数据。

     .drective 段,指令段。链接器在处理信息后会删除 .drectve 节,因此该节不会出现在所链接的映像文件中。

     .edata 段,存放export symbols,包含有关其他映像可以通过动态链接访问的符号的信息。 导出的符号通常在 DLL 中找到,但 DLL 也可以导入符号。

     .idata 段,存放import symbols, 导入符号的所有映像文件都包含此.idata端。

     .pdata 段,包含用于异常处理的函数表条目的数组。

     .reloc 段,基址重定位表包含映像中所有基址重定位的条目。

     .tls 段, 为静态线程本地存储 (TLS) 提供直接 PE 和 COFF 支持。

     .rsrc 段,  资源按多级二进制排序树结构编制索引。

     .cormeta 段, 存放CLR元数据。

     .sxdata 段,对象的有效异常处理程序在该对象的 .sxdata 段中列出。

其他:

    1. vs生成的map文件详解_vs生成map文件_ivy_0709的博客-CSDN博客

    2. MAP File Contents - Debugging Applications - Visual Basic Planet

    3. Finding Crash Information Using the MAP File - CodeProject

     4.c - What does the "Rva+Base" mean in a MSVC linker generated map file? - Stack Overflow

...文章来源地址https://www.toymoban.com/news/detail-691490.html

到了这里,关于Visual Studio(2022)生成链接过程的.map映射文件以及.map映射文件的内容说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • visual studio 2022 头文件和库目录问题造成的编译失败

    新安装visual studio 2022后,在一个简单工程上编译测试中,遇到标准头文件(new.h)报错,详情如下: 经验证和对比visual studio 2019,发现visual studio 2022以下sdk路径有一个明显差异。详情如下所示。 visual studio 2019 安装后的默认路径如下 而 visual studio 2022路径如下 库目录也一样不

    2023年04月08日
    浏览(87)
  • 通过Microsoft Visual Studio将.c源文件编译成.dll动态链接库

    手里有一个.c源文件,想用VS2017将其编译成.dll,直接在VS2017里打开源文件无法执行编译,因为VS2017不能编译杂项文件。 首先,新建-项目-Visual C++-Windows桌面,选择“动态链接库(DLL)”,给定项目名称和存放位置,点确定。然后在“解决方案资源管理器窗口”,右击“源文件”

    2024年02月12日
    浏览(45)
  • Visual Studio2022报错 无法打开 源 文件 “openssl/conf.h“解决方式

    近一段时间有了解到Boost 1.82.0新添加了MySQL库,最近一直蠢蠢欲动想要试一下这个库 所以就下载了源码并进行了编译(过程比较简单,有文档的) 然后在VS2022中引入了Boost环境,然后粘了一下文档中的一小段代码: 然后编译一下就有了这样的报错: 无法打开 源 文件 “open

    2024年02月15日
    浏览(42)
  • 使用VisualStudio2022插件(Visual Studio Installer Projects 2022)打包 .Net 6 框架下的 WPF项目 为安装文件

    目录 更新说明(2024/01/22) 序言 一、还是安装Visual Studio Installer Projects 2022插件 二、创建Setup Project项目 2.1 在现有解决方案中添加Setup Project项目 2.2 (更新)添加需要打包的文件  2.2.1 准备添加输出项。 2.2.2 【核心】添加 WpfMain 项目输出。 2.2.3 添加 WpfPluginManager 项目输出。

    2024年02月03日
    浏览(97)
  • Visual Studio 2022 报错 LNK1104 无法打开文件“opencv_world310.lib”

    “link.exe”已退出,代码为 1104。 LNK1104 无法打开文件“opencv_world310.lib” 右键项目——属性—— 附加依赖项——编辑——取消勾选“从父级或项目默认设置继承”——确认,重新运行程序即可 运行结果 可能是以前电脑上安装过旧版本的visual studio,老版本文件与新版的vs不兼

    2024年02月16日
    浏览(44)
  • 求教!visual studio2012无法生成exe文件

    1------ 已启动生成: 项目: Project1, 配置: Release X64 ------ 1d:文档visual studio 2012ProjectsProject1Project1Project1.vcxproj : error MSB4014: 生成已意外停止,因为发生内部故障。 1d:文档visual studio 2012ProjectsProject1Project1Project1.vcxproj : error MSB4014: Microsoft.Build.Exceptions.BuildAbortedException: 已取消

    2024年02月16日
    浏览(50)
  • 如何查看.dll文件函数接口?(DLL动态链接库)(查看动态链接库、查看接口、查看函数)(Visual Studio的dumpbin工具)(Dependency Walker)

    查看DLL(动态链接库)文件的接口,通常需要使用一些专门的工具。这里有两个比较常见的方法: Dependency Walker 使用Dependency Walker:Dependency Walker是一个免费的实用工具,可以列出DLL文件中的所有导出函数以及它们可能依赖的其他DLL。只需在Dependency Walker中打开想查看的DLL文件

    2024年02月08日
    浏览(42)
  • visual studio 生成dll文件以及修改输出dll文件名称操作

    Windows系统下Visual Studio可以通过.def文件创建dll。 1.确定需要导出的函数,test.cpp文件中定义如下 2. 添加 .def文件,一般添加到源文件下面。 * 在代码栏下面有一个“模块定义文件”,即我们的.def文件 3.编写test.def文件 文件添加完成,下一步即可设置一些导出规则。 4.在我们的

    2024年02月14日
    浏览(37)
  • 【visual studio】visual studio 2022 无法 复制黏贴

    其他网友也有反馈到微软: VS 2022 Copy and Paste form feature Broken? Copy paste still not fixed in Visual studio 2022 表现是突然就无法复制和黏贴了 其他的app 就没有这个问题 每次都是重启电脑解决。 今天,11月29号是17.41版本了。 -net5.0直接卸载了

    2024年02月04日
    浏览(83)
  • Visual Studio 2022 用.net 5.0 创建T4模板 遇到的两个问题 (未能加载文件或程序集“EnvDTE 、未标记为可序列化)

    Visual Studio 2022 用.net 5.0 创建T4模板 遇到的两个问题 安装了Visual Studio 2022 用.net 5.0 创建了项目,项目中的T4模板报错 解决方案:#@ assembly name=“EnvDTE”# 修改成 #@ assembly name=“Microsoft.VisualStudio.Interop”# 借鉴:https://cloud.tencent.com/developer/ask/sof/411286 解决方案: 借鉴:https://qa.

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包