windows 你能解释一下在c++世界里什么是符号和调试符号吗?

0yg35tkg  于 2023-03-19  发布在  Windows
关注(0)|答案(2)|浏览(151)

像可执行文件这样的二进制文件是由符号组成的吗?调试符号就是其中的一种?
如何理解符号?

lzfw57am

lzfw57am1#

下面是一个非常高层次的解释:
首先,符号不仅仅存在于C世界中。当用一些特定的设置构建时,它们存在于一些高级语言如C、C等的二进制文件中。

int i = 2;

在二进制文件中,i只是一个内存位置(例如0x10203040),它正在使用2进行初始化。没有名为i的内存位置。名称i是通过与二进制文件一起加载的调试符号分配给该内存位置的(当用某些标志构建时),它维护“存储器位置”到“源代码级名称”Map。
例如,PE文件格式提供了Debug目录,其中存储了有关调试符号的信息。这些在调试时非常有用,因为在没有此类调试符号的情况下,仅根据二进制0和1进行调试将是一项真正具有挑战性的任务。因此,当您调试此类二进制文件时(其具有上面的i的定义),其已经用调试标志构建,调试器通过PE文件中的调试目录知道存储器位置“0x10203040”对应于i

crcmnpdw

crcmnpdw2#

呃,不。可执行文件包含机器码。以及全局变量的初始化值。在Windows上,调试信息通常存储在一个单独的文件中,一个. pdb。来自该文件的关于程序中的函数或变量的调试数据称为符号。
dbghelp API是described here

相关问题