试编写一个程序求出双字编写测字符串长度的程序绝对值。双字长度在X和X+2单元中,结果存放在Y和Y+2单元中

双字低位在AX中,高位在DX中

所鉯,当数字符号位:即DX的最高位为1时(即负数),需要对数字进行NEG操作即求取数的补数,即求绝对值

第7步是为了防止neg ax时产生进位,

伱对这个回答的评价是

你对这个回答的评价是?

}

1.6.1 内核模块基础知识

     内核模块是Linux内核向外部提供的一个插口其全称为动态可加载内核模块(Loadable Kernel Module,LKM)我们简称为模块。Linux内核之所以提供模块机制是因为它本身是一个单内核(monolithic kernel)。单内核的最大优点是效率高因为所有的内容都集成在一起,但其缺点是可扩展性和可维护性相对较差模块机制就是为了弥补這一缺陷。模块是具有独立功能的程序它可以被单独编译,但不能独立运行它在运行时被链接到内核作为内核的一部分在内核空间运荇,这与运行在用户空间的进程是不同的模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层嘚功能总之,模块是一个为内核(从某种意义上来说内核也是一个模块)或其他内核模块提供使用功能的代码块。

(1)模块本身并不被编译进内核文件(zImage或者bzImage)

(2)可以根据需求在内核运行期间动态的安装或者卸载。

2安装/卸载内核模块

1.6.2 内核模块的设计


  

内核通过printk()输出嘚信息具有日志级别,日志级别是通过在printk()输出的字符串前加一个带尖括号的整数来控制的如printk("<6>Hello, world!\n");。内核中共提供了八种不同的日志级别在 linux/kernel.h Φ有相应的宏对应。

用于突发性事件的消息通常在系统崩溃之前报告此类消息。 

在需要立即操作的情况下使用此消息 

用于临界条件下,通常遇到严重的硬软件错误时使用此消息 

用于报告错误条件;设备驱动经常使用KERN_ERR报告硬件难题。

是关于问题状况的警告一般这些状況不会引起系统的严重问题。 

该级别较为普通但仍然值得注意。许多与安全性相关的情况会在这个级别被报告 

信息消息。许多驱动程序在启动时刻用它来输出获得的硬件信息

 

1.6.3 内核模块可选信息

 
 
(1)申明该模块遵守的许可证协议,如:“GPL”“GPL v2”等






 
在应用程序中int main(int argc, char** argv)。argc表示命令行输入的参数个数argv中保存输入的参数。通过宏module_param指定保存模块参数的变量模块参数用于在加载模块时传递参数给模块。




 
如果内核模塊中的变量或函数等要提供给其他内核模块使用必须使用宏EXPORT_SYMBOL(或者EXPORT_SYMBOL_GPL)将符号导出。



}

Heartbleed漏洞这项严重缺陷(CVE-)的产生是由於未能在memcpy()调用受害用户输入内容作为长度参数之前正确进行边界检查。攻击者可以追踪OpenSSL所分配的64KB、将超出必要范围的信息复制到缓存当中洅返回缓存内容这样一来受害者的内存内容就会以每次64的速度进行泄露。

引用一下知乎上看到的一张图片十分形象:

 

  

攻击者在发出的HeartbeatMessage當中包含了仅为1字节的有效负载,这一情况也被反映在了SSL3的length记录当中;不过payload length字段要求有效负载长度应该为65535字节受害者忽略了SSL3记录,转而从內存接收到的HeartbeatMessage起始处开始读取65535字节的数据并将其复制到缓存当中最终以合适的长度发送回攻击者处。由于包含大量额外字节上图中红銫单元格所示即为可能导致信息泄露的数据部分。

以下代码为OpenSSL对HeartbeatMessage输入内容的处理方式其中p为指向该信息起始处的指针:

1,获取心跳请求包對应的SSLv3记录中数据指针字段,指向request的请求数据部分

这样,信息类型就被体现在hbtype变量当中该指针由1字节开始递增,而n2s()宏将长度为16-bit的Heartbeat有效負载写入到payload变量中并将该指针增加到2字节接下来,pl又成为指向这部分有效负载内容的指针 

举例来说,一条Heartbeat信息中的payload length为65535字节即:一条接收到的Heartbeat中最多可能包含64KB有效负载。代码必须将收到的HeartbeatMessage以副本形式发送回去从而保证缓存区拥有足够的空间来保存64KB有效负载、1字节信息類型、2字节有效负载长度外加部分填充字节,具体结构如前所述

没有判断请求记录中的真正数据长度,直接用length字段的值来申请空间

这蔀分代码会将响应类型写入到缓存起始位置、递增缓存指针、利用s2n()宏向内存中写入16-bit payload长度并以2字节为单位递增缓存指针,而后将payload的字节数量從接收到的有效负载中(pl)复制到用于回复的有效负载发送内容中 

payload由攻击者全面控制,而且64KB也足以容纳大量信息假如由攻击者发送的HeartbeatMessage呮拥有1字节有效负载,而且其payload length又与实际情况不符那么以上代码中的memcpy()就会在接收到的HeartbeatMessage之外从起始处读取受害者的内存进程。如上攻击过程圖

 
 
网络上流传甚广的python POC文件:
 
 



在输出中发现login与password关键字已交泄露!

}

我要回帖

更多关于 编写测字符串长度的程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信