2010-06-23 11:18:41
涉及的技术内容包括:ASM、ANSI C、.NET/C#、Python、Linux/Ubuntu 等。
记录读书笔记、生活点滴。关注基础理论和开发……
除特别标注外,所有文章均为作者原创,转载请注明出处。谢谢!

  查看 "推荐文章目录"。  


  研发中心长期招聘开发人员,详情请点击 "Linux/C, Python 职位"、 ".NET/C# 职位"。
  雨痕内部技术交流群,欢迎熟识的朋友参与。 将 添加为您的 MSN 联系人即可。
  为杜绝垃圾广告的侵扰,只有注册用户可以发表评论和留言。
  如果有什么问题,可以单击右侧图标给雨痕发消息。( 绿色: 在线; 灰色: 脱机)
浏览模式: 普通 | 列表
12月, 2009 | 1

Linux 进程内存模型 (2)

[ 2009-12-11 09:03:52 | 作者: yuhen ]
接下来我们分析不同生存周期变量在进程空间的位置。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>

int x = 0x1234;
char *s;

int test()
{
    static int a = 0x4567;
    static int b;

    return ++a;
}

int main(int argc, char* argv[])
{
    int i = test() + x;
    s = "Hello, World!";

    char* p = malloc(10);

    return EXIT_SUCCESS;
}

在分析 ELF 文件结构时我们就已经知道全局变量和静态局部变量在编译期就决定了其内存地址。

...

阅读全文…

Linux 进程内存模型 (1)

[ 2009-12-11 08:30:05 | 作者: yuhen ]
下图是一个简易的内存模型示意图。其中某些段 (Segment) 是从可执行文件加载的,有关 ELF Section 和 Segment 的映射关系,我们可以从 ELF Program Headers 中获取相关信息。

uploads/200912/11_083011_1.png

$ readelf -l hello

Elf file type is EXEC (Executable file)
Entry point 0x8048410
There are 8 program headers, starting at offset 52

Program Headers:
    Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
...

阅读全文…
1