• Symbol


    Symbol能够包含以下的一些信息:

    • 全局变量
    • 局部变量
    • 函数名称, 参数
    • 结构体
    • 源代码行号

    有三种类型的Symbol

    • export symbols
      是dll本身的一部分. 比如ntdll.dll和kernel32.dll暴露出很大一部分他们的函数, 以便于他们能够像API一样地调用, 但是大多数的dll会有很少的exported symbols. 大致上, export symbol不包含函数的参数信息, 并且因为暴露的函数实在太少, 所以当你只有export symbol的时候不能确定栈信息的正确性.
    • pdb symbols (public symbols)
      包含一些基本的符号信息, 比如说函数名和全局变量, 但是, 并不是所有的函数名都会在public symbol中暴露出来. dll的开发者可以选择暴露什么到public symbol中, 他可以隐藏任何它觉得会暴露过多的实现信息的信息.
    • private pdb symbols (private symbols)
      包含上面列出的所有信息.

    在debugging的时候, symbols会跟各自的dll或者exe匹配起来, 匹配的桥梁是一个GUID. 这意味着, 哪怕在你的符号搜索路径下有多个版本的ntdll.pdb, debugger也会知道用哪一个与你当前版本的ntdll.dll进行匹配.

    symbol的路径包括以下几个地点:

    • .sympath
    • dll被加载的目录
    • 环境变量_NT_SYMBOL_PATH指定的目录

    摘译自:

    Why do I get weird function names on my stack? (a discussion on symbols)

    http://blogs.msdn.com/tess/archive/2005/12/05/why-do-i-get-weird-function-names-on-my-stack-a-discussion-on-symbols.aspx

  • 相关阅读:
    Python--面向对象编程(2)
    Python--面向对象编程(1)
    Python--常用模块
    Python--函数
    Hadoop综合大作业
    hive基本操作与应用
    MapReduce作业
    熟悉HBase基本操作
    熟悉常用的HDFS操作
    爬虫大作业(对电影的爬取)
  • 原文地址:https://www.cnblogs.com/awpatp/p/1680156.html
Copyright © 2020-2023  润新知