静态函数

静态分析基础技术

孤街浪徒 提交于 2020-02-29 09:25:23
1、使用反病毒软件来确认程序样本的恶意性 在分析一个可疑的恶意代码样本时,第一步就最好是拿多个反病毒软件扫描下这个文件,看是否有哪个引擎已经能够识别它。反病毒软件是不完美的,它们主要依靠一个已知恶意代码可识别片断的特征数据库,以及基于行为与模式匹配的分析(启发式检测),来识别可疑文件。 一些罕见的恶意代码通常也不会被反病毒软件所识别,因为它们并不在病毒库里。最后,启发式检测,尽管经常也能成功地识别出一些未知恶意代码,但仍然可以被一些新型独特的恶意代码所绕过。 VirusTotal( http://www.virustotal.com ),可调用多个反病毒引擎来进行扫描。 2、哈希值:恶意代码的指纹 哈希是一种用来唯一标识恶意代码的常用方法。 将哈希值作为标签使用 与其他分析师分享哈希值,以帮助他们来识别恶意代码 在线搜索这段哈希值,看看这个文件是否已经被识别 3、查找字符串 使用的工具strings 4、加壳与混淆恶意代码 查壳工具:PEID PE 文件以一个文件头开始,其中包括代码信息、应用程序类型、所需的库函数与空间要求。PE头中的信息对于恶意代码分析师而言,是非常有价值的。 5、链接库与函数 代码库可以被静态链接,也可以运行时链接,或者动态链接。了解代码库如何被链接的,对于我们理解恶意代码来说,是非常关键的,因为我们在PE文件头中可以找到的信息取决于链接了哪些代码库。 6

第 4 章 对象与类

安稳与你 提交于 2020-02-28 22:25:49
目录 4.1 面向对象程序设计概述 4.1.2 对象,93 4.1.4 类之间的关系,94 4.2 使用预定义类 4.2.2 Java 类库中的 LocalDate 类,98 4.3 用户自定义类 4.3.1 Employee 类,103 4.3.2 多个源文件使用,105 4.3.4 构造器,106 4.3.5 隐式参数与显式参数,108 4.3.8 私有方法,111 4.4 静态域与静态方法 4.4.1 静态域,112 4.4.2 静态常量,113 4.4.3 静态方法,114 4.4.4 工厂方法,115 4.4.5 main 方法,115 4.5 方法参数,118 4.6 对象构造 4.6.2 默认域初始化,123 4.6.3 无参数的构造器,124 4.6.4 显式域初始化,125 4.6.5 参数名,125 4.6.6 调用另一个构造器,126 4.6.7 初始化块,127 4.7 包,131 4.10 类设计技巧,144 4.1 面向对象程序设计概述 4.1.2 对象,93 对象的行为(behavior)—— 方法 对象的状态(state)—— 域 对象标识(identity)—— 实例 4.1.4 类之间的关系,94 依赖(“uses-a”) 组合(“has-a”) 继承(“is-a”) 4.2 使用预定义类 4.2.2 Java 类库中的 LocalDate 类

C语言 存储类型

折月煮酒 提交于 2020-02-28 20:22:33
C语言 存储类型 类型 作用域 生命周期 存储位置 auto变量 一对{}内 当前函数 栈区 static局部变量 一对{}内 整个程序运行期 初始化在data段,未初始化在BSS段 extern变量 整个程序 整个程序运行期 初始化在data段,未初始化在BSS段 static全局变量 当前文件 整个程序运行期 初始化在data段,未初始化在BSS段 extern函数 整个程序 整个程序运行期 代码区 static函数 当前文件 整个程序运行期 代码区 register变量 一对{}内 当前函数 运行时存储在CPU寄存器 字符串常量 当前文件 整个程序运行期 data段 内存分区 一、内存分区说明 代码区(text segment) 加载的是可执行文件代码段,所有的可执行代码都加载到代码区,这块内存是不可以在运行期间修改的。 未初始化数据区(BSS) 加载的是可执行文件BSS段,位置可以分开亦可以紧靠数据段,存储于数据段的数据(全局未初始化,静态未初始化数据)的生存周期为整个程序运行过程。 全局初始化数据区/静态数据区(data segment) 加载的是可执行文件数据段,存储于数据段(全局初始化,静态初始化数据,文字常量(只读))的数据的生存周期为整个程序运行过程。 栈区(stack) 栈是一种先进后出的内存结构,由编译器自动分配释放,存放函数的参数值、返回值、局部变量等

一款国产静态程序检查工具与Converity的对比测试

馋奶兔 提交于 2020-02-28 00:42:25
源伞科技Pinpoint,作为BAT都在使用的一款静态代码分析工具,到底有什么领先于其他厂商的能力? 1. 扩展和部署功能对比 源伞科技Pinpoint现有的检查器可以通过简单的json配置文件扩展业务逻辑。比如敏感数据泄露到日志检查器,企业或许有很多自己的日志打印函数,我们可以通过人工配置指定,即可提高检测质量。 如果不想人工配置,Pinpoint有未公开发布的库函数学习工具,可以通过线下分析企业代码库自动学习和生成上述配置文件。 Pinpoint对分布式多机扫描部署支持比 Coverity 好,并发扫描和结果合并x性能也比 Coverity 更强,能更好支持BAT级别的数千代码库扫描( 已在BT部署验证 )。 2. 分析能力对比 本节补充一些人工构造的例子介绍Pinpoint在分析能力上比Coverity强的部分。本节所有代码示例,Coverity均有误报或漏报。 Pinpoint更懂数据流 精确深度的指针分析,深入分析内存中的程序行为 高深度高精度函数调用链分析,查找跨越多层函数的深度问题 示例代码如下: (链接: https://www.sourcebrella.com/online-showcase/?id=5b483da03a21cd078346028f),此示例代码基于空指针(Null Pointer Dereference)问题检测。 准备代码:

C语言变量

谁说胖子不能爱 提交于 2020-02-27 15:18:18
C语言变量 任何一种编程语言都离不开变量,特别是数据处理型程序,变量的使用非常频繁,没有变量参与程序甚至无法编制,即使编制运行后的意义也不大。变量之所以重要,是因为变量是编程语言中数据的符号标识和载体。 C语言是一种应用广泛的善于实现控制的语言,变量在C语言中的应用更是灵活多变。那么变量究竟是什么呢?变量是内存或寄存器中用一个标识符命名的存储单元,可以用来存储一个特定类型的数据,并且数据的值在程序运行过程中可以进行修改。可见,变量首先是一个标识符或者名称,就像一个客房的编号一样,有了这个编号我们在交流中就可方便言表,否则,我们只可意会,那多不方便。为了方便,我们在给变量命名时,最好能符合大多数人的习惯,基本可以望名知义,便于交流和维护;其次,变量是唯一确定的对应内存若干存储单元或者某个寄存器。这些是编译器来保证的,用户一般不用费心。 程序员一旦定义了变量,那么,变量就至少可为我们提供两个信息:一是变量的地址,即就是,操作系统为变量在内存中分配的若干内存的首地址;二是变量的值,也就是,变量在内存中所分配的那些内存单元中所存放的数据。 由于程序的多样需要,我们对变量也有各种各样的要求,比如:变量的生命期,变量的初始状态,变量的有效区域,变量的开辟地和变量的开辟区域的大小等等;为了满足这些要求,C语言的发明者就设置了以下变量: 1、 不同数据类型的变量;如:char cHar, int

JS中的词法作用域(静态作用域)和动态作用域

点点圈 提交于 2020-02-26 08:25:36
首先说明一下, JavaScript没有用动态作用域概念 ,但 this 机制却和动态作用域类似! JavaScript是通过作用域链的方式进行变量查找的,而JS作用域链是词法作用域,也就做静态作用域! 词法作用域:在函数声明(定义)时确定的 动态作用域:在函数调用时确定的 var cat = '有鱼'; function person() { console.log(cat); // 有鱼 } function student() { var cat = '年年'; person(); } student(); 代码分析: ①调用student函数,其内部又调用了person函数,因为JS使用的是词法作用域,即关心的是函数声明时的作用域,所以我们需要看查person定义里面的情况; ②person函数内部输出了cat,此时,找不到cat,按照作用域链特性向外层寻找,找到了cat为‘有鱼’;所以结果输出的是‘有鱼’; ③如果JS支持动态作用域,则需要看person()调用所在的作用域,即cat='年年';不过JS不支持动态作用域! 来源: oschina 链接: https://my.oschina.net/u/4450662/blog/3164871

c#学习历程2

拜拜、爱过 提交于 2020-02-26 05:27:08
一.类的访问权限 访问修饰符:internal ;public ;abstract 或者internal abstract public abstract;sealed或internal sealed / /不写修饰,默认为internal,同一程序集都可访问 internal class MyClass { } //抽象类,不能被实例化,只能被继承 abstract class ClassA { } //密封类,只能被实例化,不能被继承 sealed class ClassB { } 二.字段方法 字段:由三部分组成----访问修饰符,字段的类型和字段名。 属性:是对字段的扩充,保证内部成员的完整性(这样字段可以定义为私有,通过属性赋字段值 取字段值) class ClassC { // 字段 public int a ; public int b = 1 ; public static int c = 2 ; public const int d = 3 ; public readonly int e ; //只读类型 } //属性 class ClassD { private string name ; private int age ; public string Name { //value为隐形 set { name = value ; } get { return

变量的存储类别

蹲街弑〆低调 提交于 2020-02-25 20:22:58
一、在运行程序的时候,操作系统会将虚拟内存进行分区。 1).堆 在动态申请内存的时候,在堆里开辟内存。 2).栈 主要存放局部变量。 3).静态全局区 1:未初始化的静态全局区 静态变量(定义变量的时候,前面加static 修饰),或全局变量,没有初始化的,存在此区 2:初始化的静态全局区 全局变量、静态变量,赋过初值的,存放在此区 4).代码区 存放咱们的程序代码 5).文字常量区 存放常量的。 普通的全局变量 概念: 在函数外部定义的变量 int num=100;//num 就是一个全局变量 int main() { return 0; } 作用范围: 全局变量的作用范围,是 程序的所有地方。 只不过用之前需要声明。声明方法 extern int num; 注意声明的时候,不要赋值。 生命周期: 程序运行的整个过程,一直存在,直到程序结束。 注意:定义普通的全局变量的时候,如果不赋初值, 它的值默认为0 静态全局变量static 概念: 定义全局变量的时候,前面用static 修饰。 static int num=100;//num 就是一个静态全局变量 int main() { return 0; } 作用范围: static 限定了静态全局变量的,作用范围 只能在它定义的.c(源文件)中有效 生命周期: 在程序的整个运行过程中,一直存在。 注意:定义静态全局变量的时候

python静态方法、类方法和实例方法

天大地大妈咪最大 提交于 2020-02-25 07:26:01
1. 静态方法 如果我们的类属性是一个私有变量,我们就需要定义一个函数使得在类外可以访问它。我们希望既可以用类名来访问,也可以用实例名来访问,那么该如何做呢? 下面这样是不行的: class Robot: # __开头表示私有变量 __counter = 0 def __init__(self): type(self).__counter += 1 def RobotInstances(self): return Robot.__counter if __name__ == "__main__": x = Robot() print("通过实例访问: ", x.RobotInstances()) # 下面会报错 print("通过类访问: ", Robot.RobotInstances()) 改代码无法通过类名访问,因为这种定义方式必须要定义一个实例,self指向这个实例。 如果我们在定义RobotInstances这个函数的时候,不写self参数,那么可以通过类访问,不能通过实例访问,静态方法就是为了解决这个问题。只需要在定义的函数前添加@staticmethod,这是装饰器语法。 class Robot: # __开头表示私有变量 __counter = 0 def __init__(self): type(self).__counter += 1 @staticmethod

spring管理bean的三种创建方式

主宰稳场 提交于 2020-02-23 18:04:57
Spring支持如下三种方式创建Bean 1:调用构造器创建Bean 2:调用静态工厂方法创建Bean 3:调用实例工厂方法创建Bean 一:调用构造方法创建Bean 调用构造方法创建Bean是最常用的一种情况Spring容器通过new关键字调用构造器来创建Bean实例,通过class属性指定Bean实例的实现类,也就是说,如果使用构造器创建Bean方法,则<bean/>元素必须指定class属性,其实Spring容器也就是相当于通过实现类new了一个Bean实例。调用构造方法创建Bean实例,通过名字也可以看出,我们需要为该Bean类提供无参数的构造器。下面是一个通过构造方法创建Bean的最简单实例 1:Bean实例实现类 Person.java [java] view plain copy package public class private public Person(String name) ); public void +name); } 因为是通过构造函数创建Bean,因此我们需要提供无参数构造函数,另外我们定义了一个name属性,并提供了setter方法,Spring容器通过该方法为name属性注入参数。 2:配置文件beans.xml [html] view plain copy <? = = ?> < = = ="http://www