Sym

【逆向】WinDbg符号文件详解

流过昼夜 提交于 2020-05-01 00:24:57
符号文件 编译器和链接器在创建二进制镜像文件(诸如exe、dll、sys)时,伴生的后缀名为(".dbg",".sym",".pdb")的包含镜像文件编译、链接过程中生成的符号信息的文件称为符号文件。 具体来说,符号信息包括如下内容: 1 // 全局变量(类型、名称、地址) 2 // 局部变量(类型、名称、地址) 3 // 函数(名称、原型、地址) 4 // 结构体类型定义 符号路径 符号路径是调试器寻找符号文件的方向,它可以是本地文件夹路径、可访问的UNC路径、或者是符号服务器路径。符号服务器有一套命名规则,使得调试软件能够正确找到需要的符号文件。为了降低网络访问的成本,WinDbg会将从服务器上下载到的符号文件,保存在本地缓存中,以后调试器需要符号文件的时候,先从缓存中寻找,找不到的时候再到服务器上下载。 设置符号路径 WinDbg允许用户指定一个或多个目录来存放符号文件,并使用环境变量" _NT_SYMBOL_PATH "来指向这些目录的位置。这样WinDbg在启动时就会自动到这些目录中搜索相应的符号文件。对操作系统内部模块的符号文件,你可以在微软官方网站上下载符号文件包(现在不提供离线下载了)。但是操作系统经常升级会导致系统中很多模块的实际版本与已经发布的符号文件无法匹配,因此,实际使用过程中最常用的方式是根据使用的模块版本访问微软提供的符号服务器下载( http:/

基于python的小波阈值去噪算法

时光怂恿深爱的人放手 提交于 2020-04-24 23:39:10
https://blog.csdn.net/alwaystry/article/details/52756051 发表于 2018-01-10 16:32:17 嵌入式设计应用 +关注 小波图像去噪原理 图像和噪声在经小波变换后具有不同的统计特性:图像本身的能量对应着幅值较大的小波系数,主要集中在低频(LL)部分;噪声能量则对应着幅值较小的小波系数,并分散在小波变换后的所有系数中。基于此可设置一个合适的阈值门限,认为大于该阈值的小波系数的主要成份为有用的信号,给予收缩后保留;小于该阈值的小波系数,主要成份为噪声,予以置零剔除;然后经过阈值函数映射得到估计系数;最后对估计系数进行逆变换,就可以实现去噪和重建。去噪时,通常认为低通系数含有大量的图像能量,一般不作处理,只对剩余三个高通部分进行处理。一次阈值去噪并不能完全去除噪声,还需要对未作处理的低频部分(LL)再次进行小波分解和阈值去噪,直到实际图像与估计图像的偏差达到最小值。但是,随着分解和去噪次数的增加,小波系数中的噪声能量越来越小,并且趋于分散,去噪的效果将逐渐降低。一般来说,进行3-4层小波分解和去噪就可以达到满意的去噪效果。 小波阈值去噪步骤 (1)二维信号的小波分解。选择一个小波(sym8)和小波分解的层次N(3),然后计算信号S到第N层的分解。 (2)对高频系数进行阈值量化,对于从一到N的每一层,选择一个阈值

用 C 语言开发一门编程语言 — 变量元素设计

时光毁灭记忆、已成空白 提交于 2020-04-12 19:27:41
目录 文章目录 目录 前文列表 变量 变量语法规则 变量的读取和存储 将变量加入 Lisp Value 体系 变量的计算 变量的定义与赋值 异常处理优化 源代码 前文列表 《 用 C 语言开发一门编程语言 — 交互式解析器 》 《 用 C 语言开发一门编程语言 — 跨平台的可移植性 》 《 用 C 语言开发一门编程语言 — 语法解析器 》 《 用 C 语言开发一门编程语言 — 抽象语法树 》 《 用 C 语言开发一门编程语言 — 异常处理 》 《 用 C 语言开发一门编程语言 — S-表达式 》 《 用 C 语言开发一门编程语言 — Q-表达式 》 变量 我们先前实现的 S-Expression 和 Q-Expression 都是直接为了运算求值,但并没有考虑到变量是什么类型。显然的,一门好的编程语言,需要支持多种类型的变量,让程序员可以灵活的命名变量、声明变量类型。 从代码实现的角度来看,我们需要一个新的数据结构来支撑对变量元素进行设计,这个结构将存储所有的变量名和值,我们将这个数据结构称为 Environment(环境)。每次打开一个新的交互式解析器,就会创建一个新的 Environment,让程序员可以存储和再次调用已经定义好的变量。 变量语法规则 首先,我们需要设计好针对变量的语法规则,使得编程语言可以拥有更多的合法符号(关键字)。区别于 C

用 C 语言开发一门编程语言 — 基于 Lambda 表达式的函数设计

南楼画角 提交于 2020-04-12 16:52:14
目录 文章目录 目录 前文列表 函数 Lambda 表达式 函数设计 函数的存储 Lambda 函数 父类环境 可变的函数参数 前文列表 《 用 C 语言开发一门编程语言 — 交互式解析器 》 《 用 C 语言开发一门编程语言 — 跨平台的可移植性 》 《 用 C 语言开发一门编程语言 — 语法解析器 》 《 用 C 语言开发一门编程语言 — 抽象语法树 》 《 用 C 语言开发一门编程语言 — 异常处理 》 《 用 C 语言开发一门编程语言 — S-表达式 》 《 用 C 语言开发一门编程语言 — Q-表达式 》 《 用 C 语言开发一门编程语言 — 变量元素设计 》 函数 函数是所有程序设计的关键,其本质源自于一个数学概念,有了函数之后,程序员就可以只考虑它的意义,而不用考虑它的内部结构。在计算机科学的早期,程序员会将复杂的任务分解成一个个小的函数。那时就有人提出了一个设想:只要有足够的时间,程序员们就可以建立一个完整的函数库,以此满足所有计算的要求。当然,现今为止这个设想仍未预见有实现的苗头,主要是因为随着科技的发展计算问题也越发复杂。但很显然的,现在所有受到欢迎的编程语言都有这个趋向,提供更多的库,更好的代码重用率,更好的抽象,让我们的工作更简单。Python 就是一个非常好的例子。 Lambda 表达式 Lambda 表达式(Lambda Expression

用 C 语言开发一门编程语言 — 条件分支

断了今生、忘了曾经 提交于 2020-04-12 10:26:45
目录 文章目录 目录 前文列表 条件分支 排序函数 等于函数 if 函数 递归函数 源代码 前文列表 《 用 C 语言开发一门编程语言 — 交互式解析器 》 《 用 C 语言开发一门编程语言 — 跨平台的可移植性 》 《 用 C 语言开发一门编程语言 — 语法解析器 》 《 用 C 语言开发一门编程语言 — 抽象语法树 》 《 用 C 语言开发一门编程语言 — 异常处理 》 《 用 C 语言开发一门编程语言 — S-表达式 》 《 用 C 语言开发一门编程语言 — Q-表达式 》 《 用 C 语言开发一门编程语言 — 变量元素设计 》 《 用 C 语言开发一门编程语言 — 基于 Lambda 表达式的函数设计 》 条件分支 本文中,我们将介绍几种在 C 中经常用到的和条件判断有关的函数。包括:排序,等式,if 函数,递归函数等。 排序函数 我们将复用之前的 Number 数据类型来表示比较结果。 制定一个类似于 C 语言的条件分支规则:0 即 False,非 0 即 True。 因此,我们的排序函数有点像算术函数的简化版本。 排序函数仅仅能够处理数字。此外,我们希望函数只能适用于两个参数的情形。根据两个 lval 输入之间的相等比较返回一个数字为 0 或 1 的 lval。使用 C 语言的比较运算符可以做到这一点。与之前的算术函数一样,我们将使用单个函数来完成所有比较。

C 语言开发一门编程语言 — S-表达式

蓝咒 提交于 2020-04-10 15:35:02
目录 文章目录 目录 前文列表 使用 S-表达式进行重构 读取并存储输入 实现 S-Expression 语法解析器 实现 S-Expression 存储器 实现 lval 变量的构造函数 实现 lval 变量的析构函数 读取 S-Expression 对输入进行求值 前文列表 《 用 C 语言开发一门编程语言 — 交互式 Shell 》 《 用 C 语言开发一门编程语言 — 跨平台 》 《 用 C 语言开发一门编程语言 — 语法解析器 》 《 用 C 语言开发一门编程语言 — 基于抽象语法数的求值计算 》 《 C 语言开发一门编程语言 — 异常处理 》 使用 S-表达式进行重构 所谓 S-表达式(Symbolic Expression,S-Expression,符号表达式)是指一种以人类可读的文本形式表达半结构化数据的约定方式。S-Expression 在 Lisp 家族的编程语言中被使用而为人所知。S-Expression 在 Lisp 中既用作代码,也用作数据,这使得它非常强大,能完成许多其他语言不能完成的事情。 为了拥有这个强大的特性,我们需要将以往实现的求值过程分为两个新的过程: 读取并存储输入 对输入进行求值 这样(先存储、再求值)的话,S-Expression 在 Lisp 中就可以既用作代码,也用作数据了。 读取并存储输入 实现 S-Expression 语法解析器

C 编程异常 — double free or corruption (fasttop)

限于喜欢 提交于 2020-04-10 07:43:15
问题 :运行代码的时候程序崩溃。 *** Error in `./parsing': double free or corruption (fasttop): 0x00000000023d2350 *** ======= Backtrace: ========= /lib64/libc.so.6(+0x81679)[0x7f349ead0679] ./parsing[0x4011fe] ./parsing[0x401b07] /lib64/libc.so.6(__libc_start_main+0xf5)[0x7f349ea71505] ./parsing[0x400f59] ======= Memory map: ======== 00400000-00413000 r-xp 00000000 08:01 34603142 /root/Lispy/parsing 00612000-00613000 r--p 00012000 08:01 34603142 /root/Lispy/parsing 00613000-00614000 rw-p 00013000 08:01 34603142 /root/Lispy/parsing 023a4000-023df000 rw-p 00000000 00:00 0 [heap] 7f3494000000-7f3494021000 rw-p

用 C 语言开发一门编程语言 — 语法解析器

不问归期 提交于 2020-04-09 04:08:22
目录 文章目录 目录 前文列表 编程语言的本质 实现语法解析器 使用 MPC 解析器组合库 安装 快速入门 波兰表达式 正则表达式 实现波兰表达式的语法解析 前文列表 《 用 C 语言开发一门编程语言 — 交互式 Shell 》 《 用 C 语言开发一门编程语言 — 跨平台 》 编程语言的本质 在 19 世纪 50 年代,语言学家 Noam Chomsky 定义了一系列关于语言的重要理论。这些理论支撑了我们今天对于语言结构的基本理解。其中重要的一条结论就是: 自然语言都是建立在递归和重复的子结构之上的 。Chomsky 提出的理论是非常重要的。它意味着,虽然一门语言可以表达无限的内容,我们仍然可以使用有限的规则去解析所有用该门语言写就的东西。这些有限的规则就叫语法(grammar)。 当我们学习一门自然语言的时候,我们往往从语法开始。当我们学习一门编程语言的时候也一样,当我们尝试开发一门编程语言的时候亦如此,首先要考虑的就是语言的语法、及其语义。 实现语法解析器 为了定义一门编程语言的语法,首先需要能够正确解析用户按照语法规则编写的程序。为此,需要编程语言程序就需要一个语法解析器,用来判断用户的输入是否合法,并产生解析后的内部表示。内部表示是一种计算机更容易理解的表示形式,有了它,我们后面的解析、求值等工作会变得更加的简单可行。 使用 MPC 解析器组合库 MPC(Micro

Java中的屠龙之术——如何修改语法树

自古美人都是妖i 提交于 2020-03-26 15:00:30
3 月,跳不动了?>>> 在 Lombok经常用,但是你知道它的原理是什么吗? ,和 Lombok经常用,但是你知道它的原理是什么吗?(二) 两篇文章中介绍了关于Lombok的底层原理,其实总结为一句话来说就是在编译期通过改变 抽象语法树 而实现的。上面两篇文章已经讲了抽象语法树的相关知识点,如果有不清楚的可以看一下。 本篇涉及到的所有代码都在github上面有 本篇涉及到的所有代码都在github上面有 本篇涉及到的所有代码都在github上面有 在网上关于如何修改Java的抽象语法树的相关API文档并不多,于是本篇记录一下相关的知识点,以便随后查阅。 JCTree的介绍 JCTree是语法树元素的基类,包含一个重要的字段pos,该字段用于指明当前语法树节点(JCTree)在语法树中的位置,因此我们不能直接用new关键字来创建语法树节点,即使创建了也没有意义。此外,结合访问者模式,将数据结构与数据的处理进行解耦,部分源码如下: public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition { public int pos = -1; ... public abstract void accept(JCTree.Visitor visitor); ... }

android从应用到驱动之—camera(2)---cameraHAL的实现

痞子三分冷 提交于 2020-03-22 19:27:28
3 月,跳不动了?>>> 本来想用这一篇博客把cameraHAL的实现和流程都给写完的.搞了半天,东西实在是太多了.这篇先写cameraHAL的基本实现框架,下一篇在具体写camerahal的流程吧. cameraHAL的实现: 对于初学者来说,最大的疑问是系统是如何调用hardware的. 这里就以camera来举例说明. 调用hardware的程序是cameraservice,我们就去它里面看看它是如何找到hardware的 先把源码贴上来: /* ** ** Copyright (C) 2008, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software **