摘要:
可执行文件的装载与进程 可执行文件只有装载到内存以后才能被CPU执行。 本章会介绍: 什么是进程的虚拟地址空间? 为什么进程要有自己独立的虚拟地址空间? 装载的几种方式,包括覆盖装载、页映射。 虚拟地址空间的分布情况,比如代码段、数据段、BSS段、堆、栈。 进程虚拟地址空间 程序是一个静态的概念,它 阅读全文
摘要:
_CrtSetReportMode 指定的目标或目标的生成的特定报表类型 _CrtDbgReport和调用任何宏_CrtDbgReport、 _CrtDbgReportW,如_ASSERT、 _ASSERTE、_ASSERT_EXPR 宏, _ASSERT、 _ASSERTE、 _ASSERT_EX 阅读全文
摘要:
_CrtSetReportFile 在使用后_CrtSetReportMode来指定 _CRTDBG_MODE_FILE,可以指定要接收的消息文本的文件句柄。 _CrtSetReportFile也可由_CrtDbgReport、 _CrtDbgReportW以指定文本 (仅限调试版本) 的目标。 语 阅读全文
摘要:
使用 CRT 库查找内存泄漏 转载官方文档:https://docs.microsoft.com/zh cn/visualstudio/debugger/finding memory leaks using the crt library?view=vs 2019 内存泄漏是 C/C++ 应用程序中 阅读全文
摘要:
Windows PE/COFF Windows的二进制文件格式PE/COFF 在32位Windows平台下,微软引入了一种叫 PE(Portable Executable) 的可执行格式。作为Win32平台的标准可执行文件格式,PE有着跟ELF一样良好的平台扩展性和灵活性。PE文件格式事实上与ELF 阅读全文
摘要:
BFD库 由于现代的硬件和软件平台种类非常繁多,它们之间千差万别。比如,硬件中CPU有8/16/64位的;字节序有大端/小端的;有些对访问内存地址对齐有着特殊要求;有些有MMU。软件平台有些支持动态链接;有些支持调试。这些五花八门的软硬件平台导致了每个平台都有它独特的目标文件,即使同一个格式比如EL 阅读全文
摘要:
绝大部分情况下,我们使用链接器提供的默认链接规则对目标文件进行链接。这在一般情况下是没有问题的,但对于一些特殊要求的程序,比如操作系统内核、BIOS(Basic Input Output System)或一些在没有操作系统的情况下运行的程序(如引导程序Boot Loader,或者嵌入式系统的程序,或 阅读全文
摘要:
一个没有输入输出的程序没有任何意义,但是一个程序如何做到输入输出呢?最简单的办法是使用操作系统提供的应用程序编程接口(API,Application Programming Interface)。 在一般的情况下,一种语言的开发环境往往会附带有语言库(Language Library),这些库就是对 阅读全文
摘要:
C++的一些语言特性使之必须由编译器和链接器共同支持才能完成工作。最主要有两个方面:C++的重复代码消除 / 全局构造与析构。另外由于C++的各种特性,比如虚拟函数、函数重载、继承、异常等,使得它背后的数据结构异常复杂,这些数据结构往往在不同的编译器和链接器之间相互不能通用,使得C++程序的二进制兼 阅读全文
摘要:
由于弱符号机制允许同一个符号的定义存在于多个文件中,所以可能会导致的一个问题是:如果一个弱符号定义在多个目标文件中,而它们的类型又不同,怎么办?目前的链接器本身并不支持符号的类型,即变量类型对于链接器来说是透明的,它只知道一个符号的名字,并不知道类型是否一致。当我们定义的多个符号定义类型不一致时,链 阅读全文