Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windbg 什么是';导出的符号';lm命令中的平均值_Windbg - Fatal编程技术网

Windbg 什么是';导出的符号';lm命令中的平均值

Windbg 什么是';导出的符号';lm命令中的平均值,windbg,Windbg,我正在与WinDbg进行调试会话。我键入lm命令,它显示加载的模块,但我不太明白下面的(导出符号)是什么意思 048c0000 0550c000 Db (export symbols) Db.dll 05520000 05535000 Graph (export symbols) Graph.dll 我期待它会说符号未加载或加载或延迟,但这都不是。在这种情况下,(导出符号)表示什么?导出符号表示没有加载PDB文件,而是从二进制文件(EX

我正在与WinDbg进行调试会话。我键入
lm
命令,它显示加载的模块,但我不太明白下面的(导出符号)是什么意思

048c0000 0550c000   Db         (export symbols)       Db.dll
05520000 05535000   Graph      (export symbols)       Graph.dll

我期待它会说符号未加载或加载或延迟,但这都不是。在这种情况下,(导出符号)表示什么?

导出符号表示没有加载PDB文件,而是从二进制文件(EXE、DLL)读取符号。二进制文件有一个导出表。此表用于解析符号

导出表是PE文件格式的一项功能。如果你想看,你可以用。如果您想要一个示例二进制文件,请使用
%windir%\system32
中的
ntdll.dll

关于信息量,按以下顺序增加:

  • 没有符号
  • 导出符号
  • 公共符号
  • 私人符号

您可能还会看到“延迟”符号,这意味着WinDbg还不知道,因为它还没有尝试加载它们。使用
ld*;。重新加载
如果你想删除延迟符号。

谢谢,顺便说一句,除了private之外,public和private的区别是什么?my app和public的区别是microsoft提供的吗?@zar:你可能想决定将你应用的符号提供给其他人,以便进行调试。因此,您将PDB文件发送给他们。但是,您不希望它们依赖于私有方法、私有属性和私有成员。因此,在将这些方法发送给其他人之前,请从PDB文件中删除这些方法。您将把公共方法留在里面,因为它通常定义一个API。@zar:所以公共符号不是公共的,因为它们是公共可用的,而是因为它们只包含公共方法等。将私有符号转换为公共符号的工具是。Microsoft曾经从NTDLL中删除过一次。@ThomasWeller,PE文件中的
.NET目录
可以被视为导出符号吗?据我所知,在调试.NET应用程序转储时使用此目录中的信息。@用户名:在.NET中,IL代码中有很多信息。您可以在运行时通过反射获得大量类型信息。调试期间,也可以通过MsCorDac访问此信息。不过,我不会将其与导出的符号进行比较。