原文链接:Automatic Vulnerability Detection in Embedded Devices and Firmware: Survey and Layered Taxonomies: ACM Computing Surveys: Vol 54, No 2

Please Subscribe Wechat Official Account:信安科研人

发送“嵌入式设备和固件中的自动漏洞检测”,获取原文pdf

一 嵌入式系统上的动态分析技术

本文回顾了在嵌入式系统上采用重新托管和模糊测试的动态分析方法,还简要介绍了可能用于嵌入式系统的普通二进制文件的现有方法。

1.1 Re-hosting(重新托管)

与常规平台相比,嵌入式系统会遇到特定的可扩展性问题。 在传统的计算环境中,使用多处理或虚拟化的并行技术可以加速测试活动。 相反,这在嵌入式系统中是不切实际的,因为它们需要访问一批类似的物理设备,由于财务成本或资源有限(例如电源和空间),这是不切实际的。

此外,测试嵌入式系统需要频繁重启,以确保每个新测试用例的状态清晰。

为了解决这些问题,提出了Re-hosting技术,其中固件被提取并移动以在与原始环境不同的环境中执行。 在本节概述了通过使用Re-hosting执行部分/完整模拟和 Web 界面提取的现有工作。

1.1.1 部分仿真

技术背景:在虚拟和可扩展的环境中分析嵌入式系统是一项具有挑战性的任务,因为运行固件需要时常访问其相关的外围设备,而这些外围设备是找不到的。此外,由于缺乏文档或建模复杂性,很难模拟嵌入式外围设备。

技术概念:为了解决这些问题,提出了部分仿真,其中提取和修改固件以在仿真器内执行,同时根据需要将命令转发到外围设备。部分仿真提供了对目标嵌入式系统及其所有外围设备进行完全仿真的能力。

局限性:可扩展性受到与连接的外围设备的频繁交互的影响(就是说,连接的设备种类局限导致没法在其他种类的设备上扩展测试)。此外,跨多个设备扩展以进行多个同时测试可能是有问题的。

现有工作总结:

 (1)重新托管的嵌入式系统固件通常需要访问其外围设备以完成测试。因此,为了促进动态二进制分析方法在重新托管的嵌入式设备上的适应,Kammerstetter等人提出了一种称为PROSPECT的部分仿真器。

Prospect实现了一个代理,以将从QEMU虚拟机内运行的固件发起的每个外围硬件访问隧道,传输到测试中的嵌入式设备。

为了评估该解决方案,PROSPECT 通过在环境设置上运行商业火警系统进行评估,然后使用捕获的网络流量数据包的原始流进行广泛的基于突变的模糊测试。因此,不需要提前指定网络协议。

Fuzzing是通过频繁地每次随机修改一个字节来执行的。因此,在目标设备上发现了零日漏洞。但是,Prospect不能应用于没有网络连接接口的设备。

(2)类似于Prospect,Avatar动态分析框架将实际硬件与通用处理器仿真器集成。

首先,Avatar从目标设备提取固件image,然后用软件代理注入提取的固件。因此,它可以在模拟器内部运行提取的指令,同时拦截所有要转发到物理设备的 I/O 操作。

Avatar 针对三种安全场景进行评估:逆向工程、后门检测和三种不同设备(GSM 设备、硬盘和无线传感器节点)上的漏洞发现。

除了嵌入式系统的部分仿真以及用其外围设备协调执行之外,Avatar后续工作还可以协调与其他物理设备,调试器和流行的二进制分析框架 (例如angr) 的交互 ,QEMU、PANDA 和OpenOCD 。目前,Avatar支持x86、x86-64和ARM硬件架构,然而,其模块化特性允许其适应以支持额外的架构,甚至实现中间表示。

(3)由于仿真过程缓慢,一般仿真解决方案不适合需要近实时响应的嵌入式设备。为了解决这个问题,有人为任意基于 ARM 的嵌入式系统提出了一个名为 SURROGATES 的部分仿真器,以促进高级动态分析。

SURROGATES 可以处理时钟变化、直接内存访问和中断,还可以近乎实时地模拟嵌入式设备。 SURROGATES 利用定制的 FPGA 低延迟硬件将嵌入式系统与主机的 PCI Express 总线桥接起来,这使得它比 avatar更快,更适合测试对时间敏感和复杂的系统,例如医疗设备。

1.1.2 全仿真

技术背景:与传统计算设备相比,为了以可扩展的方式对嵌入式设备进行动态分析,需要在其设备之外重新托管目标嵌入式系统固件。

技术概念:这涉及仿真或虚拟化环境,而无需访问任何外围设备。这个过程称为完全仿真,它比部分仿真更具可扩展性。此外,它不需要目标嵌入式系统硬件的物理存在。

局限性:但是,完全仿真仅适用于目标系统的外围设备可以成功仿真的情况。当嵌入式系统基于 Linux 并且成功提取其固件或目标嵌入式系统硬件的完整文档可用时,完全仿真是可行的。完全仿真为在嵌入式系统领域采用可扩展的动态分析方法打开了大门。

现有工作:

(1)为了实现这一目标,Chen 等人介绍了一个名为 FIRMADYNE的全仿真器动态分析框架,它专门用于基于 Linux 的固件嵌入式系统。

FIRMADYNE 设计为独立于物理硬件和特定于硬件的外围设备。 此外,它还提供了写入动态生成的非易失性内存和文件的能力。

它利用 QEMU(一个完整的系统仿真器)来运行一个通用的 Linux 检测内核,其中包含从目标固件映像中提取的文件系统。

为了评估 FIRMADYNE,作者收集了一个包含 23,035 个固件映像的大型数据集,并成功地从 9,486 个固件映像中提取了文件系统。  FIRMADYNE 在 69 个固件映像中发现了 14 个未知漏洞。

(2)为了使动态分析(例如,模糊测试和符号执行)在全仿真或虚拟环境中运行的嵌入式系统固件上更具可扩展性和适用性,Gustafson等人提出了Pretender框架,该框架可以在虚拟环境中自动重新托管各种嵌入式系统的固件。

这使得动态分析解决方案可以类似于传统桌面计算环境并行执行

Pretender的工作原理如下:

首先,它重复运行目标固件,并记录其与相关硬件的真实交互。

然后,使用机器学习和模式识别技术,使用记录来为每个可用的检测到的外围设备建立模型。

最后,将得到的模型与众所周知的全仿真器(例如,QEMU)或框架分析(例如,Angr)集成,以便以可扩展的方式对其相关固件进行进一步的交互和精确分析。

Pretender的目标不是在目标嵌入式系统中找到新的漏洞;相反,它支持高级动态分析方法来检测已知漏洞。

1.1.3 WEB接口分析

技术背景:为方便起见,嵌入式设备(如路由器和交换机)提供了一个Web接口,可通过该接口进行配置或用于与外部环境进行交互。但是,这些Web界面容易受到各种安全威胁。

现有工作:

(1)Costin等人提出了一个可扩展的自动化动态分析框架,以发现使用Web管理界面的固件中的漏洞。无论设备供应商是谁,所提出的系统都会评估嵌入式设备中Web界面的安全性。

为此,它首先从固件中提取嵌入式Web服务器对应的服务软件,然后使用RIPS工具进行静态分析,以查找目标嵌入式系统的PHP Web接口中的潜在漏洞。

此外,它在模拟环境中运行Web界面。

最后,使用开源Web渗透测试工具Arachni、Zed Attack Proxy(ZAP)和W3AF对正在运行的Web界面进行测试。结果发现并验证了225个严重漏洞。所提出的系统是第一个针对嵌入式Web界面中PHP安全性的系统。

(2)此外,前面提到的工作 FIRMADYNE [28] 收集了基于 Linux 的固件并在 QEMU 模拟器中运行它们。 如果仿真固件具有 Web 访问界面,则通过本地网络在可访问的 Web 界面上执行 Web 渗透测试,以检查众所周知的漏洞(例如,命令注入、缓冲区溢出和信息泄露)。

(3)与上述方法不同,Bojinov等人手动研究嵌入式系统Web界面。

作者证明,所有21个被研究的嵌入式系统设备都包含严重的Web漏洞,例如跨通道脚本(XCS)。XCS利用包括在现代嵌入式设备中的多个特征,诸如网络附加存储(NAS)上的网络接口和FTP服务器之间的跨信道交互,或者网络服务器和SIP电话服务之间的交互,以损害嵌入式设备网络接口。

1.2 Fuzzing(模糊测试)

下文中将使用“模糊器”代表fuzzer

模糊测试的原理这里就不赘述辽,这里概述一下使用模糊测试对嵌入式、固件进行漏洞挖掘的工作。

模糊测试一般分为三类:基于变异的基于生成的基于混合的

按照对代码的依赖性,模糊测试又可以分为:黑盒、白盒、灰盒

(i)黑盒模糊器,无需访问内部状态即可生成输入种子的目标程序。

(ii) 白盒模糊器,通过考虑输入覆盖率和目标程序内部分析来生成输入种子。

(iii) 灰盒模糊器(也称为基于覆盖的模糊器),它根据监测每个输入种子产生的代码覆盖率的仪器反馈来改变生成的输入种子。

此外,模糊器可以分为定向模糊测试和基于覆盖的模糊测试。

前者的目标是在执行快速测试过程的同时生成覆盖目标程序代码和路径的测试用例。然而,后者的目标是生成覆盖尽可能多的目标软件/固件的测试用例。

下文概述已经应用于嵌入式设备的解决方案。

1.2.1 基于变异的FUZZER

基于变异的模糊器的技术本质上从准备好的样本或种子开始,然后以重复的方式,输入样本的部分/位被随机或概率地变异。接下来,将获得的样本输入到测试程序/系统中,同时监视其等待可能由突变输入之一触发的错误或崩溃的行为。

基于变异的模糊器可以以黑盒方式或基于覆盖的方式应用。

(1)IoTFuzzer

        Chen等人提出了一种名为IoTFuzzer的物联网Fuzzing框架来定位内存损坏

首先,IotFuzzer利用嵌入式系统相关的移动应用程序来远程控制它们。IotFuzzer对目标固件移动应用程序执行动态分析,以导出命令消息的逻辑。这允许识别命令格式、发送的URL和使用的加密方案。

然后,使用数据流分析来指示应用程序通过更改学习消息的内容来产生有意义的测试用例。生成的测试用例会模糊目标设备固件,以发现内存崩溃漏洞。

这使得基于引导协议的黑盒Fuzzing成为可能,就算没有特定的协议规范,即使在专有协议上也能工作。

IotFuzzer在17个真实的物联网设备上进行了评估,发现了15个漏洞,其中8个以前从未报告过。但是,IotFuzzer无法提供漏洞的位置。

IoTFuzzer 不适用于复杂的有状态消息传递协议(例如,SNMP、FTP、SSL、BGP 和 SMB),这些协议保持严格的验证机制(例如,校验和和消息长度)几乎所有收到的消息。因此,格式错误的输入将偏离当前协议状态,从而错过发现深层错误的机会。

(2)IoTHunter

为了解决有状态的网络协议,Yu 等人 提出 IoTHunter,它实现了一种使用多阶段消息生成的新技术,并与 American Fuzzy Lop (AFL) 、Boofuzz和 Avatar集成。

除了具备已知状态的能力外,它还可以从给定的状态序列中探索未知状态。为了实现基于反馈的状态探索并执行覆盖引导的灰盒模糊测试,它根据给定的状态序列转移到另一个协议的状态。

(3)Firm-AFL

        AFL由于兼容性问题,该方法不适用于各种嵌入式设备。Firm-AFL是建立在Firmadyne 之上的,因为后者已经解决了许多硬件兼容性问题。FirmAFL还通过在不需要系统模式仿真的情况下以用户模式而不是系统模式对目标固件程序进行模糊测试,从而解决了全仿真环境中的模糊吞吐量问题。

1.2.2 基于生成的FUZZER

基于生成的模糊器需要目标程序的输入格式来生成测试用例。通过传统随机变异技术生成的测试用例可能在程序执行的初始状态就被拒绝,因为它们与所需的输入格式不匹配。

语法表示技术通过将生成的输入限制为特定的数据结构或语法来解决随机变异技术的这种限制,以确保达到程序的深层逻辑。

(1)WmiFuzzer

       WmiFuzzer测试运行的Iot固件,不需要预定义的数据模型。

WmiFuzzer在Iot设备的Web管理界面上应用Fuzzing,用于管理或用户交互。然而,在设计这样的接口时,并没有统一的规范可以遵循。

为了解决这个问题,WmiFuzzer首先使用UI自动化并穷尽所有可能的GUI来构建初始合法消息种子(与目标COTS Iot设备兼容)。

然后,应用代理捕获的有效GUI作为种子。

其次,将捕获的消息转换为抽象语法树,其中树的节点包含消息字段的内容。

最后一步是对修改后的消息进行模糊测试,实施网络监控技术以检测是否触发了漏洞。

WmiFuzzer的局限性在于,它只能与具有通过HTTP或HTTPS访问的Web管理界面的Iot设备配合使用。

(2)RPFuzzer

RPFuzzer引入了为通信协议量身定制的预定义数学模型,以生成初始消息(种子),随后用作模糊测试的起点。

然后,基于变异的模糊器应用于生成的种子以生成测试用例。

为了检测是否触发了漏洞,使用了三种监控方法:发送正常数据包、监控CPU利用率和检查系统日志。

RPFuzzer 在通过 SNMP 协议启动测试运行的 Cisco 路由器上进行了评估。 RPFuzzer 发现了 8 个漏洞,其中 5 个是零日漏洞。

(3)fuzzing PLC

阿尔姆格伦等人提出突变和随机模糊器来检查 PLC 和智能电表。他们的实验表明,生成的输入数据包可以发现潜在的拒绝服务漏洞,并且在某些情况下还可以破坏 PLC 的执行。

二 嵌入式设备上的符号执行技术

符号执行是另一种用于解决嵌入式系统硬件兼容性挑战尤其是外围设备建模困难的途径。因此,固件将在符号执行引擎内符号执行,同时将外围设备访问的结果视为符号数据,而不是导出要在仿真器或虚拟机内执行的固件。

使用符号执行可提高可伸缩性并有助于探索更多代码路径。然而,它有其自身的局限性,例如路径爆炸,当固件需要访问其外围设备时(例如,外围设备生成的中断经常创建更多状态 ),影响可能会被放大。

2.1 符号执行

现有与嵌入式设备结合的工作:

(1)FIE

FIE建立在Klee的修改版本上,以覆盖所有可能的执行路径,并通过合并状态修剪和内存涂抹来处理循环覆盖。FIE使用符号执行来预测和描述外围设备。

(2)FirmArice

检测固件是否存在后门。通过静态分析提取程序数据依赖图,结合符号执行,以寻找权限漏洞。

(3)Inception

        需要访问源代码,建立在KLEE上,以紧密同步的方式将它们发送到符号引擎来解决由与外围设备交互引起的中断问题。

2.2 Concolic Execution联合执行(符号执行和具体执行的混合)

联合执行技术将符号执行与具体执行相结合。 在嵌入式系统上应用联合执行是一个具有挑战性的问题,因为它需要强大的计算资源,就 CPU 和内存而言,这在嵌入式系统中通常是有限的。         此外,符号执行依赖于仪器工具和定理证明器,目标嵌入式系统可能不支持这些工具。

(1)陈等人提出在目标嵌入式系统上执行具体执行,同时在强大的远程主机(如个人计算机、工作站等)上执行重量级符号执行。

为了建立这种协调,使用了嵌入式系统供应商(即 VxWorks)提供的交叉调试功能,这使得这项工作仅限于 VxWorks。

此外,所提出的工具在符号执行引擎和目标嵌入式设备之间建立了一对一的关系,这会影响其可扩展性。

(2)AI等人将联合执行引入嵌入式系统测试,同时支持多种架构,例如 x86、ARM 和 PPC。 为了实现他们的目标,作者使用了一种便携式仪器方案。

它们将固件和状态信息提升到 VEX 中间表示中,以使符号引擎更容易处理多个 CPU 架构中的约束。

三 各类工具与方法框架的对比以及总结

本节将比较嵌入式系统的现有方法以及可能应用于嵌入式系统的传统方法,进一步讨论了从这项比较研究中的主要观察结果。

3.1 比较嵌入式系统的现有方法

由于缺乏类似的设置环境、嵌入式系统和固件映像,对现有解​​决方案进行全面评估是不可行的。可以根据为每个解决方案提供的可用信息在方法、实施和评估方面进行定性和定量比较,如下表一所示(列名就不一一赘述辽):

((•)表示该方法提供相应的功能,否则为空。(−)表示未提供信息。(*)表示该提案支持微控制器系列MSP430。“分布”表示在所有调查提案中使用的每个功能类别的百分比。灰色单元格是为了可读性而分隔不同的类别。)

    表二提供了表一中更详细的信息。表中的Challenge对应上一篇文章的第二节。

     表3显示了模糊测试和符号执行方法在其实现和评估方面的其他定性和定量比较。

3.1.1 调研比较总结

对表 1、表 2 和表 3 的主要观察结果如下:

  • 对嵌入式系统进行各种二进制分析的主要目标之一是克服可扩展性问题、硬件兼容性,并在适用的传统环境中应用众所周知的动态分析方法分析嵌入式系统
  • 大多数选定的方法已经在 ARM 和 MIPS CPU 架构上进行了评估。 此外,(具体类型见上一篇文章的2.5节)与其他针对 Type-I 和 Type-II 嵌入式设备的方法相比,所提出的方法不太可能针对 Type-III 嵌入式设备。
  • 大多数方法不需要访问固件源代码,除了两个,因为这些工作基于 KLEE,它在源代码上工作。
  • 完全仿真方法或与完全仿真集成的方法更具可扩展性,因为它们不需要访问任何硬件。
  • 重新托管方法试图克服多 CPU 架构和可扩展性挑战。
  • 模糊测试方法试图克服测试用例生成和故障检测挑战。
  • 大多数报告的错误、已知漏洞和零日漏洞都是通过使用模糊测试方法发现的。
  • 考虑到表 2 和表 3 中包含的特征,与其他方法相比,通过其提供的网络连接接口对嵌入式系统进行模糊测试能以更少的资源消耗显示出更好的性能。 但是,很难找到在 fuzzing 活动期间触发的错误的位置。
  • 模糊测试一个缺点是需要大量时间。
  • 最后,将 AFL 和 联合执行引入嵌入式系统测试世界为引入迄今为止为通用计算环境提出的各种最先进的方法打开了大门,例如 Driller、TaintScop、 和 SmartSeed。

3.2 比较可重复使用的和潜在的嵌入式系统的传统方法

本节将嵌入式系统分析中重用的传统方法与其可能引入的争议进行定性比较。这种比较基于为每个解决方案提供的可用信息,如表 4 所示:

3.2.1 观察总结

关于表四主要观察结果如下:

首先,如表4所示,大多数建议的方法已在传统CPU体系结构 (x86-64) 上运行的二进制代码上进行了评估。尽管许多方法声称它们的工作可以适应于支持多个CPU体系结构,但几乎没有任何工作是专门设计这种可移植性的。

其次,正如前面关于表3的关键观察中提到的,大多数报告的错误、漏洞和零日漏洞都是通过使用模糊方法发现的; 然而,模糊方法需要大量的时间。此外,这些方法不能应用于大规模和复杂的软件 (例如,Web浏览器) 或在合理的时间内检查大量的软件。

第三,使用机器学习生成智能种子可以略微改善模糊测试。例如,利用对抗神经网络生成智能种子的SmartSeed可以发现最多数量的漏洞和崩溃。

最后,结合两种或多种二元分析方法显示出有希望的可扩展和准确的结果。例如,将模糊测试与符号执行或污点分析相结合会导致钻工和受此工作启发的其他类似方法 (例如,deepFuzz ) 发现更多错误。

3.3 动态分析和符号执行的局限性与展望

局限性1 分析基准不同

        为了对最先进的方法进行基准测试,需要有代表性的数据集和统一的评估指标。大多数现有工作在他们自己收集的数据集上进行实验,并使用不同的指标评估他们系统的准确性。

尽管有 DARPA CGC 数据集 、LAVA 和 LAVA-M 数据集 ,但是它们并不全面,无法涵盖所有​​用例。

因此,为了评估,需要两个大规模数据集。

(i) 固件数据集,包含从不同供应商收集的大量公开可用的固件图像和嵌入式设备。

(ii) 漏洞数据集,由大量跨架构和交叉编译的二进制文件(例如免费的开源库)组成,包括带有调试信息的漏洞函数。

因此,现有方法可以应用于这些数据集,并且通过考虑统一的评估指标,可以评估所提出方法的准确性和可扩展性。

最后,可以对最先进的方法进行全面的定量和定性比较研究。

局限性2 有限的代码覆盖率

代码覆盖率对于完整的漏洞发现至关重要。

动态分析技术可能会遇到路径探索问题,这将停止探索其他代码的过程。 此外,某些路径可能不会被采用,除非由用户交互触发。 此外,如果不满足正确的条件(即逻辑炸弹),在运行时加载的代码可能会逃脱动态和静态分析。

局限性3 无用的测试用例生成

        为了执行可扩展的动态分析,首先应该为目标程序提供合适的输入样本。

目前已经有使用符号执行或机器学习模型手动生成。手动生成测试用例是一个长期的过程,不可扩展,而且成本很高。然而,符号执行也是不可扩展,不能为复杂的软件提供高覆盖率,而且计算成本很高。

此外,提出的将符号执行与模糊测试相结合来解决此问题的解决方案尚不适用于复杂的软件(例如,Web 浏览器和移动应用程序)。

最近比较火的机器学习方法从提供的训练样本中自动生成输入样本。 一个潜在的开放研究领域是集成使用机器学习的自动测试用例生成与模糊测试或混合方法。

此外,Lie 等人建议改进的模糊测试方法除了执行跟踪之外,还应考虑理解漏洞类型和特征,作为模糊测试期间的反馈。

局限性4 模糊测试的低效率

        模糊测试方法的主要优点是,它们可以在短时间内快速产生数千个输入案例。但是,大多数输入案例将在程序执行的早期被拒绝,因为它们与输入格式不匹配。

因此,以传统方式应用模糊技术并不那么实用。查找漏洞将花费大量时间,尤其是那些位于深层位置的漏洞。

相反,模糊测试方法需要其他技术的帮助,例如污点分析以识别不同的输入类型,或符号执行以帮助通过复杂条件。

局限性5 符号执行的低效率

        降低约束求解器的时间复杂度仍然是一个难题。

嵌入式设备和固件中的自动漏洞检测(二):动态分析与符号执行技术相关推荐

  1. 嵌入式设备和固件中的自动漏洞检测(一):概览

    原文链接:Automatic Vulnerability Detection in Embedded Devices and Firmware: Survey and Layered Taxonomi ...

  2. 嵌入式设备和固件中的自动漏洞检测(三):静态分析技术

    原文链接:Automatic Vulnerability Detection in Embedded Devices and Firmware: Survey and Layered Taxonomi ...

  3. 商用硬件Token设备软件实现中的Envelope漏洞分析

    前言 我最近正在研究一个使用加密Token(USB加密狗)的不知名Windows软件,其中可执行文件本身经过某种形式的预处理,并被封装和加密,以阻止在没有加密狗的情况下使用.目前,该软件不再适用于Wi ...

  4. 通过Web安全工具Burp suite找出网站中的XSS漏洞实战(二) 1

    一.背景 笔者6月份在慕课网录制视频教程XSS跨站漏洞 加强Web安全,里面需要讲到很多实战案例,在漏洞挖掘案例中分为了手工挖掘.工具挖掘.代码审计三部分内容,手工挖掘篇参考地址为快速找出网站中可能存 ...

  5. 嵌入式C语言编程中经验教训总结(二)LDS链接文件解析

    目录 为什么要用到lds链接脚本? lds文件语法结构 lds文件实例解析 好的朋友已经做过好多年的arm开发,却对底层的编译链接逻辑很少接触,主要原因在于现在大多数应用层的开发不需要从裸板开始,工程 ...

  6. MS17-010漏洞检测与内网穿透技术的应用

    0x00 前言 本文主要介绍一下MSF模块的下载.使用,以及当攻击机处于内网,而目标机也处于内网的解决方法.这里借助MS17-010漏洞来具体讲解一下,并没有新的知识点,可以为刚入门的新手抛砖引玉,提 ...

  7. linux 嵌入式 远程升级,嵌入式设备远程固件升级方法与流程

    本发明属于远程固件更新 技术领域: ,特别是一种基于STM32F407单片机的靶场测试数据采集设备的远程固件升级方法. 背景技术: :固件(firmware)一般存储于设备中的电可擦除只读存储器EEP ...

  8. 三种常见嵌入式设备通信协议

    关注.星标公众号,直达精彩内容 嵌入式设备在运行中需要设置参数,这个工作经常由PC机来实现,需要为双方通信设计协议,有代表性协议是如下三种: 从上表可以看到,一般嵌入式设备内存和运算性能都有限,因此固 ...

  9. lua怎么嵌入php,在嵌入式设备上使用lua实现cgi的方法

    在嵌入式设备上使用lua实现cgi的方法 [技术领域] [0001]本发明涉及httpweb服务领域,具体涉及一种在嵌入式设备上使用Iua实现cgi的方法. [背景技术] [0002]1.在嵌入式we ...

最新文章

  1. JZOJ 5197. 【NOIP2017提高组模拟7.3】C
  2. 浅谈MySQL数据库中的锁与事务
  3. python nltk lemmatizer_Python聊天机器人–使用NLTK和Keras构建第一个聊天机器人
  4. python msp_Python 练习实例71
  5. IOS7.1.1真的像网上流传的那么好?没有任何问题么??
  6. ajax脚本格式,jQuery ajax调用 - jim脚本响应是什么格式?
  7. Netty 从源码的角度深入剖析 ByteBuffer
  8. C#错误异常日志记录到文件
  9. 25@JSP_day09
  10. 155.PHP中“==”运算符的安全问题
  11. 超调量怎么计算公式_PID控制 原理计算公式
  12. 华南理工大学基地二轮作品制作——蓝牙电子时钟
  13. 椭圆函数与模函数(2012.10出版)(2013-01-16 09:34:57)
  14. 1038: 绝对值最大
  15. 适用于您教会的21个最佳教堂WordPress主题(2020)
  16. IRIS的镜像配置(2)
  17. arcgis python脚本筛选与线共边的面_ArcGIS公共函数Python脚本,Arcgis,常用,功能
  18. 全国省份GDP动态统计图表echarts.js插件
  19. APP实用开发—自定义加载动画
  20. 【天坑】BLAST比对序列时遭受的痛苦

热门文章

  1. 串的子串(模式串)匹配算法
  2. 为什么游戏流畅需要60帧,而电影流畅只需要24帧?
  3. Teradata天睿任命王波为大中华区总裁
  4. Promethes监控华为S5720交换机
  5. 笔记本外接显示器闪屏
  6. Grid控件 设置格子背景颜色
  7. Electron-Vue中操作本地数据库NeDB
  8. 计算机毕业设计Java房屋租赁管理系统(源码+系统+mysql数据库+lW文档)
  9. C++入门:构造函数,析构函数,拷贝构造函数,运算符重载详解
  10. 钓鱼邮件攻击(入门)