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