存档

文章标签 ‘内存’

Intersec内存系列文章–第5部分:调试工具

2014年3月17日 没有评论

原文:http://techtalk.intersec.com/2013/12/memory-part-5-debugging-tools/

翻译:童进

引言

我们又回来了!前面我们用了4篇文章介绍什么是内存、如何去处理它,那么对于内存又会遇到怎样的问题呢。即使是最优秀的开发人员也会有bug。一个被普遍接受的估算是每千行代码可能有几十个bug ,这无疑是相当多的。因此,即使完全掌握了我们文章所述的内容,你仍然可能会遇到一些内存相关的bug。

内存相关的bug可能特别难发现和修复。我们以下面的程序为例:

mem_debug_program

这个程序的原意是将一个message作为参数打印“ hello <message>!”(默认的message是“world”)。

该程序的行为是完全不确定的,它有bug但不一定会crash。build_message函数返回一个指向分配在栈帧上的内存的指针。由栈的工作原理可知这块内存很容易被随后调用的函数覆盖,在这里很可能是fputs。因此,如果fputs内部使用足够多的栈内存从而覆盖了message,那么输出将不正确,甚至造成程序crash,而在其它情况下,程序将打印预期的消息。此外,因为使用了不安全的sprintf函数(它对写入的字节数没有限制),该程序可能会溢出。

因此,程序的行为依赖于命令行中输入的message大小、MAX_LINE_SIZE的取值以及fputs的实现[……]

阅读全文

分类: *nix安全 标签: , ,

Intersec内存系列文章–第3部分:管理内存

2014年3月17日 没有评论

原文:http://techtalk.intersec.com/2013/08/memory-part-3-managing-memory/

翻译:童进

 开发人员的视角

在前面的文章中,我们由外在的视角对内存进行了分类、分析,并观察到内存可以按照不同的方式和属性来进行分配。在接下来的文章中,我们将站在开发人员的角度看待内存。

在Intersec,我们所有的软件都是用C语言编写实现的,这也意味着我们得不断与内存管理打交道。我们希望开发人员对各种已有内存池有扎实的知识。 在这篇文章中,我们将概览Linux系统中C程序员获取内存的主要来源,同时还将介绍一些有助于保持程序正确、高效的内存管理规则。

局部性原理

对于内存页,我们已经谈论了很多,它是内核和硬件中的分配单元。CPU采用了更小的寻址单元:cache line。cache line通常是64字节长,这是CPU从主存中读取数据到内部各cache的大小。

最开始CPU没有cache,但CPU性能比内存总线性能发展更迅速。因此为了避免花费太多时间从主内存中读取数据,CPU直接在芯片内增加了少量的内存单元。最初CPU只有单一的、小的cache,但如今可能拥有三级cache。cache越接近CPU,其访问速度越快。离CPU越远,cache越大。下表是2010年酷睿i5-750处理器中每级cache的大小和访问速度:

级别

[……]

阅读全文

分类: *nix安全 标签: , , ,

Intersec内存系列-第1部分:内存类型

2014年3月11日 没有评论

原文:http://techtalk.intersec.com/2013/07/memory-part-1-memory-types/

翻译:童进

引言

这里我们选择C语言作为编程语言,因为它能帮我们实现对程序的完全控制,并达到高的性能。许多人认为,提升性能就是尽可能的减少CPU指令。然而在现代的硬件架构上,性能要考虑的因素复杂得多,绝不仅仅是CPU。程序要处理内存,CPU,磁盘和网络I/O等等。每一项处理都会增加程序的开销,每一项处理必须被正确理解以保证程序的性能和可靠性。

就像程序的复杂度会影响CPU性能一样,影响磁盘读写、网络延迟的因素也很好理解。然而,对内存的影响因素似乎不太好理解。我们的客户经验表明,即便是广泛使用的工具,如top,大多数系统管理员还是无法理解其输出。

本文是关于内存系列文章五篇中的第一篇。我们将要讨论的话题包括:内存的定义、内存是如何管理的、如何阅读工具的输出信息等……这一系列将专注于开发人员和系统管理员都感兴趣的话题。尽管其中大部分规则适用于大多数现代操作系统,我们的讨论更偏向于Linux系统和C语言。

我们不是第一个写关于内存文章的。我们强烈推荐Ulricht Drepper的经典文章《What every programmer should know about memory》。

本文将给出内存的定义,并假定读者至少对地址或者进程等概念有基本的认识。它也会经常涉及到一些内容,如系统调用、用户态与内核态的差异,不过你所需要[……]

阅读全文

分类: *nix安全 标签: , , ,