个人笔记,谨慎参考。

参考:《A Survey of Binary Code Similarity》 2021

下载:2021-ASurveyofBinaryCodeSimilarity.pdf-其它文档类资源-CSDN下载

词法:

这些知识,在NLP中出现较多。

首先就是词法,包括字符、注释、接续符、标识符等。词的构成和变化的规则。

标准规定字符集包括英语所有的大写字母和小写字母、数字0~9、以及! ” # % ’ * + , - . / : ; = ? \ ^ _ | ~ <> {} () []等符号

句法:

组词成句的规则。

语法:

代码表示的相似性。比较指令的序列。

​指令序列:
mov ax,6622H
jmp 1000:3
mov ax,0000
sub bx,ax

序列中的指令在虚拟地址空间上面是连续的,并且属于同一个函数。

序列中的指令可以首先被标准化。

标准化:
add %eax,%ebx
add %ecx,%edx
都被表示为:add REG,REG下面这个
​add [%ecx],%edx --表示为--add MEM,REG
用来跟上面的进行区分!

例如:

1.只考虑助记符( 就是和操作码一一对应的东西。)

助记符  mov操作码,类似之前说的那个B8等等之类的

2.只考虑操作码(MOV、jmp、sub

3.或者将操作数(AX 56622H)归一化为类。

语义:

被比较的代码具有相似的功能,就会被认为是语义相似的。

1.相同源代码,不同编译链生成的二进制文件是语义相似的。

2.相同密码算法的两种不同实现,也是语义等效的。

3.相同语法的代码,语义等效

但,相似语法的不一定语义等效:如:两数相乘得出结果与两数相除得出结果。

一般比较语义相似性的做法:

三种方法用于捕获语义:
将指令或系统/API/库调用语义转换为
1.结构或语法比较
2.符号公式
3.输入-输出对。

符号公式:

比较使用三种方法:

1.使用定理证明器检查等价性

两个公式执行之后,输入变量共享相同的值,输出变量是否包含相同的值。

(此方法的计算成本很高,要计算多个成对的等价查询)

2.比较公式的语义哈希以检查等价性

(对公式进行规范化(例如,使用通用寄存器名称)并简化它们(例如,应用常量传播)之后检查两个符号公式是否具有相同的哈希值。

如果两个符号公式具有相同的哈希值,应该是等效的。

语义哈希比使用求解器更有效,但其局限性在于它们会产生假阴性。

特别是,即使经过归一化和简化,两个等价的公式也可能具有不同的哈希值。

例如,公式之一中符号项的重新排序(例如,由于指令重新排序)导致不同的散列。)

3.计算公式的图形表示的相似性。

Xmatch 和 Tedem 将基本块的符号公式表示为树,并通过应用图/树编辑距离来计算它们的相似度。

计算图/树编辑距离比比较语义哈希值消耗更高,但图表示比语义散列具有优势,它可以处理术语重新排序。

输入输出对

类似于黑盒测试。仅看输出,不看中间过程。

相同的输入,如果经过的二进制代码是等价的,那么就会产生相同的输出。

但是,该做法开销较大(需要测试所有输入)。

等效的两个部分,置信度与已测试的输入成正比。

over

词法,语法,句法,语义相关推荐

  1. 【CIPS 2016】(1-3章)词法、句法、语义、语篇分析(研究进展、现状趋势)

    CIPS 2016 笔记整理 <中文信息处理发展报告(2016)>是中国中文信息学会召集专家对本领域学科方 向和前沿技术的一次梳理,官方定位是深度科普,旨在向政府.企业.媒体等对中文 信息 ...

  2. 词法语法语义_阅读法语的开源

    词法语法语义 说英语的人有很多很棒的开源资源,很容易忘记,并不是每个人都可以用英语进行交流. 因此,我一直在寻找西班牙语和法语的出色开源资源,以便在需要时可以推荐它们. 我最近看过的一个是LinuxF ...

  3. 编程语言的语法与语义

    编程语言的语法与语义 摘自<Formal Syntax and Semantics of Programming Languages >by Kenneth Slonneger / Bar ...

  4. 基于语料库的汉语形容词宾语与名词句法语义关系分析

    摘要 本研究探讨了汉语动词宾语结构中形容词宾语与特定名词之间的句法和语义关系.首先,它表明动词宾语结构可以在句子中充当谓语和修饰语.由于形容词代表名词的属性,动词宾语结构的形容词宾语与特定名词具有属性 ...

  5. 语法和语义之间的差异_语法和语义之间的区别

    语法和语义之间的差异 Here you will learn about difference between Syntax and Semantics with example. 在这里,您将通过示 ...

  6. boost::spirit模块使用 phoenix 进行实际表达式评估的语法和语义操作的测试程序

    boost::spirit模块使用 phoenix 进行实际表达式评估的语法和语义操作的测试程序 实现功能 C++实现代码 实现功能 boost::spirit模块使用 phoenix 进行实际表达式 ...

  7. boost::spirit模块演示语法和语义操作的计算器示例

    boost::spirit模块演示语法和语义操作的计算器示例 实现功能 C++实现代码 实现功能 boost::spirit模块演示语法和语义操作的计算器示例 C++实现代码 #define BOOS ...

  8. λ演算的语法和语义_λ和副作用

    λ演算的语法和语义 总览 Java 8添加了诸如lambda和类型推断之类的功能. 这使语言不再那么冗长和简洁,但是它带来了更多的副作用,因为您不必对自己的工作做得那么明确. Lambda的返回类型很 ...

  9. 阐述HTML语言的基本语法规则,HTML基本语法和语义写法规则与实例

    本文对HTML基本语法和语义进行了整理与实例,需要的朋友可以参考下 DOCTYPE DOCTYPE(Document Type) 该声明位于文档中最前面的位置,处于html标签之前,此标签告知浏览器文 ...

  10. 基于flex/bison工具生成sysY2022文法的词法/语法分析器

    基于flex/bison工具生成sysY2022文法的词法/语法分析器 本文内容学习借鉴了往届参赛的优秀校友学长学姐的开源作品代码,仅用于学习目的,现分享给大家,如有侵权请联系我删除.我使用的开发环境 ...

最新文章

  1. android timer弹出窗口,android – 如何在服务类中的Timer内显示AlertDialog?
  2. 他,16岁辍学创业,如今已身家过亿!今年将实现飞向太空的梦想
  3. 直接定址表---汇编学习笔记
  4. MongoDB 基础教程CURD帮助类
  5. 没错,纯SQL查询语句可以实现神经网络
  6. .某学校的学生公寓有14栋楼,用A~N这14个大写字母的其中一个代表楼号,每栋楼的层数为6层,用1~6六个数字表示。每层楼有40个房间,编号为01~40。具体表示一个宿舍房间时,用1个字母加3位数字表
  7. MFC UI库知多少
  8. 关于递归转换成循环的思想
  9. Java代码实现—冒泡排序
  10. [docker学习笔记] 0.工具/环境
  11. FYI| Free online events
  12. 如何使用Excel制作标靶图
  13. 个人所得税计算器(简易)
  14. Android开机速度优化 Android 开机时间优化
  15. 《实变函数简明教程》,P91,定理4.8(iii)(对等的可测函数同时可积或同时不可积)
  16. QNX Screen---Blit
  17. python-模块使用方法
  18. mysql中计算百分比
  19. 干货 | SQL 外部联接 Outer Join
  20. 基于ssm+shiro+activiti的办公自动化系统

热门文章

  1. AutoML前沿技术与实践经验分享 | 免费公开课
  2. 基于Erlang语言的视频相似推荐系统 | 深度
  3. 周礼栋:现在是计算机系统和网络研究“最好的时代”
  4. 盘点互联网大厂AI战略变迁,开发者将怎样pick前进路线?
  5. 为了智能驾驶,李彦宏要改造城市道路了!
  6. AI一分钟 | 小米公布Q2财报,上市以来股价振幅高达30%;俄制造商推出步行杀手机器人...
  7. 想学科大讯飞成为下一个业界黑马?这些项目了解一下
  8. 教你两种黑掉“人工智能”的方法
  9. 关于Java 获取时间戳的方法,我和同事争论了半天
  10. 用 MySQL 实现分布式锁,你听过吗?