文章分类 - 02-程序
程序的解释/编译、链接、运行
摘要:对浮点数比较时有时可能会有这种写法: private double DELTA = 1e-15; @Test public void testDelta(){ assertEquals(123.456, 123.456, DELTA); } 炫技感十足。 其实这是由于十进制的浮点数在计算机中用二进制
阅读全文
摘要:关于动态链接库、静态链接库 一、概述 1、动态库和静态库的异同点 动态链接库(Dynamic Linkable Library,DLL)它提供一些可以直接使用的变量,类和函数。经历了“无库—静态链接库—动态链接库”的历程后,dll应用十分广泛。 静态链接库和动态链接库都是共享代码。 如果采用静态链链
阅读全文
摘要:一 零宽正向先行断言 x(?=y) 仅匹配被y跟随的x。 /x(?=y)/.test('xyz') == true /x(?=y)/.test('xzy') == false 二 零宽度负向先行断言 x(?!y) 仅匹配不被y跟随的x /x(?!y)/.test('xyz') == false /x
阅读全文
摘要:完整原文: https://blog.csdn.net/lianOwen/article/details/102656857 1.HTTPS是使用RSA或EC系列(ECC/ECDHE)进行身份验证和交换密钥,然后再使用交换的密钥进行加解密数据。 身份验证是使用RSA的非对称加密(公钥加密私钥加密),
阅读全文
摘要:https://blog.csdn.net/daaikuaichuan/article/details/83862311 select poll 由操作系统找出其中有事件发生的部分连接 epoll划分创建、增删、回调
阅读全文
摘要:原文: GDB调试详解 https://blog.csdn.net/daaikuaichuan/article/details/89791255 调试器主要操作类型 单步调试源码 检查变量 监视变量 移动调用栈 gdb *** : 启动调试 gdb -tui ***: 显示源码界面和调试界面help
阅读全文
摘要:原文:http://kaverjody.com/chinese-terms-fake-mock-stub-driver-simulator-dummy-double/ 最近在翻译时遇到一些词汇较难定夺,我的想法如下,希望得到大家的建议和意见。包括对本文内容的补充,例如其他值得参考的资料。 关于这些词
阅读全文
摘要:原文:https://xz.aliyun.com/t/7849 前言 从一道CTF来审计学习PHP对象注入,由功能的分析到漏洞的探测、分析和利用。 考点 PHP对象注入、代码审计、序列化 分析 信息收集 题目上来给了一个文件上传的服务,没有直接去测试,对网站进行敏感信息收集,发现存在robots.t
阅读全文
摘要:来源:mikespook 英文原文:http://noeffclue.blogspot.com/2014/05/compiler-part-10-compiling-to-c.html 项目地址:https://github.com/rthornton128/calc [01]概述 [02]编译、转
阅读全文
摘要:终于到最后一个步骤了! 我们的语言规格说明书如此简单,其实可以跳过 C 直接输出汇编。我有两个不这么做的原因。首先,移植性。在这个指引中,我无须编写任何特定架构的 C 代码。C 已经被移植到各种不同的系统中去了,因此可以让 C 编译器为我们做这个工作。 其次,对于许多程序员来说,汇编比起 C 来说要
阅读全文
摘要:在构建解析器之前,首先应当谈谈如何处理目标数据。 需要用某种抽象数据类型来保存所有需要解析的数据。树形数据结构很好的满足了我们的需求。这个树描述了编程语言的语法结构,它被很恰当的叫做抽象语法树(AST)。 AST 树形数据结构总是从一个根开始,我们的也是一样。通常,在一个成熟的编译器中,你通常会有一
阅读全文
摘要:长征已经走了很远。我们概览了扫描和抽象语法树的基本概念。现在终于可以向着解析前进。 如果你已经开始与概念点不停的斗争,那么我需要警告你,从现在开始会变得越来越难。解析可能是你脑袋里已有的概念中最难的部分。我们将处理扫描器发现的词素,给它们提供一个含义,并且在 AST 中保存结果对象。 在继续前行前确
阅读全文
摘要:现在终于可以开始在扫描器上工作了。 词法分析 那么,从哪里开始呢? 这是最难的一部分,对我来说,扫描看起来应该挺简单的,但是很快我就迷失在细节里。有许多种实现扫描器的方法,我只会向你展示其中的一种。这里是 Rob Pike 在一次演讲中的演示文稿,是关于另外一种很酷的方法:在 Go 中的词法扫描。
阅读全文
摘要:在本文中,我们终于可以开始沉浸在代码中去了! 标识符 在之前的内容里,我们已经讨论了语法和需要扫描的标识符的集合。我们定义了表达式、数字和运算符。同时还明确期望有成对的括号。还应当让解析器知道,扫描器什么时候到达文件结尾。 在开始扫描之前,为了让扫描器能够工作之前,需要将代码中的标识符格式化。在编译
阅读全文
摘要:这是最后一部分关于 Calc 的设计规格! 设计语言 我希望尽量让语言保持简单。我管这个语言叫 Calc。很明了,就是用于计算器(calculator)。聪明吗,聪明吗?好,嗯,继续! 我还希望有一个单一的基础类型。我决定做一些与这个语言名字一样聪明的事情,就叫它 Integer(整数)。我知道,聪
阅读全文
摘要:在第一部分概述了这一系列文章将介绍的内容。在第二、三部分粗略的浏览了计算机语言编译的各个步骤。 在本文中,将会比上几篇概述介绍的内容略微详细一些。我将讨论语言的规格说明书。 语言设计概述 我刚刚是不是说我将不再进行太多的概述?一转身,我就变成了一个卑鄙无耻的骗子。 为了让我们更快的进入编码阶段,我已
阅读全文
摘要:我们正在编写什么? 简单来说,是一个计算器。一个用于超级简单的数学语言的编译器。 至少当前来说,我们会尽量避免处理字符串和字符这些复杂的东西,并且集中精力在数字上。当然也不是所有的数字,仅仅整数而已。当前来说系统中仅有的“类型”就是它了。 添加新类型并不困难,实际上是很简单的,但是在这个游戏中,这样
阅读全文
摘要:在第二部分,在真正深入到编译实际的步骤之前,我会对一些定义作一些概述。 编译 编译是直将编写的代码从一个语言翻译为另一个更低层级语言的过程。一个 C 编译器其实并不会直接输出机器码。而是将 C 代码翻译为汇编语言。汇编编译器获取这些内容编译为机器码。C# 和 Java 会翻译为字节码。字节码在虚拟机
阅读全文
摘要:概述 我对编译器的工作原理已经感兴趣很久了。神秘的指令和奇异的行为总是会令我迷惑不已。也从未真正理解优化是如何进行的,以及编译器又是如何知道我到底做错了什么。 当我决定学习如何编写编译器的时候,我发现有许多关于这个领域的术语和缩写。什么是 SLR 或 LALR 解析器?什么是该死的词位(lexeme
阅读全文
摘要:Win32平台下的微软C编译器(cl.exefor 80×86)的对齐策略: 1)结构体变量的首地址是其最长基本类型成员的整数倍; 备注:编译器在给结构体开辟空间时,首先找到结构体中最宽的基本数据类型,然后寻找内存地址能是该基本数据类型的整倍的位置,作为结构体的首地址。将这个最宽的基本数据类型的大小
阅读全文