290 likes | 427 Views
代码阅读与实践 Lecture 2 主讲人:胡亚斌 E-mail : yabin.hwu@gmail.com. 大规模集成电路设计应用与实践. 系列课程之. 第一次课的回顾. 编程范型: 程序语言世界的世界观与方法论 语言的多样性,动态语言与静态语言 C++ —— 范型编程 体系结构的学习对程序员很重要 最重要的能力 —— 抽象 搜索新词汇的方法 —— wikipedia Top Level CS program 高水平的 CS 课程. 1. 2. 课程内容. 知识背景. HelloWorld 的前世今生. 内存模型. 代码 生命周期.
E N D
代码阅读与实践 Lecture 2 主讲人:胡亚斌 E-mail:yabin.hwu@gmail.com 大规模集成电路设计应用与实践 系列课程之
第一次课的回顾 • 编程范型: 程序语言世界的世界观与方法论 • 语言的多样性,动态语言与静态语言 • C++ —— 范型编程 • 体系结构的学习对程序员很重要 • 最重要的能力 —— 抽象 • 搜索新词汇的方法 —— wikipedia • Top Level CS program 高水平的CS课程
1 2 课程内容 知识背景 HelloWorld的前世今生
内存模型 代码 生命周期 目标文件 编译与链接 知识背景
HelloWorld的前世今生 HelloWorld源代码 汇编实验 链接实验 目标文件实验
知识背景之 编译与链接
编译与链接 高级语言程序 a.c b.c … x.c 编译器 汇编语言程序 a.s b.s … x.s 汇编器 目标文件 printf.o … a.o b.o … x.o 链接器 可执行文件 Hello.exe
知识背景之 目标文件
目标文件格式 • Windows PE/COFF格式 • Linux ELF格式
ELF 简介 • ELF--- Executable and Linking Format • 最初由UNIX系统实验室(USL)开发并发布 • 是应用程序二进制接口的一部分 (Application Binary Interface, ABI) • 工具接口标准 (Tool Interface Standards, TIS)委员会将还在发展的ELF标准选作为一种可移植的目标文件格式 • 可以在32位Intel 体系结构上的很多操作系统中使用
ELF文件格式类型 • 可重定位文件 (Relocatable File)---包含适合于与其他目标文件链接来创建可执行文件或者共享目标文件的代码和数据 (.o .obj) • 可执行文件 (Executable File)--- 包含适合于执行的一个程序, 此文件规定了exec( )如何创建一个程序的进程映像(.exe) • 目标共享文件 (Shared Object File) --- 包含可在两种上下文中链接的代码和数据(.so .dll)
实例:可重定位文件 • 假设可重定位文件 b.o 有如下指令: • movl $0x2a, var #将42赋值给全局变量var movl指令码 源常量 C7 05 00 00 00 00 2a 00 00 00 重定位入口 目标地址 在链接阶段,链接器会在重定位入口位置,填上正确的值
目标文件格式 链接视图 执行视图
ELF头部 • 文件的最开始几个字节给出如何解释文件的提示信息。 • 该信息独立于处理器,也独立于文件的其余内容 • 魔数
ELF节区 • 代码段(.code, Code Section) • 存放编译后得到的指令 • 数据段(.data, Data Section) • 存放全局变量和局部静态变量数据 • BSS段(.bss) • 存放未初始化的全局变量和局部静态变量
程序与目标文件 intglobal_init_var=84; intglobal_uninit_var; voidfunc1(inti) { printf("%d\n",i); } intmain(void) { staticintstatic_var=85; staticintstatic_var2; inta =1; intb; func1(static_var+static_var2 +a); return0; } 可执行文件或目标文件 File Header .text section .data section .bss section
知识背景之 内存: 堆与栈
Linux内存空间布局图 0xffffffff 内核空间 0xC0000000 栈 stack unused 进程逻辑地址 动态链接库 0x40000000 unused 堆 读写节区 Section(.data, .bss) 只读节区 Section(.init, .rodata, .text) 0x08048000 researved 0
堆 • 堆是一段连续的虚拟地址空间。 • 应用程序在堆中可以动态地分配、释放所需大小的内存块。 • 在堆内分配内存块可以是任意大小的,而直接分配内存就必须以内存页为单位。 • 在C语言中,可调用malloc函数在堆上分配空间。
程序设计语言花儿朵朵之 Python
飞翔的马戏团 巨蟒组(Monty Python)是英国六人喜剧团体,早在七、八十年代他们就开始了恶搞,他们的电视喜剧系列“Monty Python and the Flying Circus”在七十年代风靡全球。这部系列剧被誉为英式无厘头的始祖, BBC最伟大的电视节目第五名。
Guido van Rossum 吉多. 范. 罗苏姆 Guido原居荷兰,1995移居到美国,并遇到了他现在的妻子。在2003年初,Guido和他的家人,包括他2001年出生的儿子Orlijn一直居住在华盛顿洲北弗吉尼亚的郊区。随后他们搬迁到硅谷,2005年至今,Guido在为Google工作(其中有一半时间是花在Python上)。 Guido在1982年获得阿姆斯特丹大学的数学和计算机科学的硕士学位,并于同年加入一个多媒体组织CWI,做调研员。1989年,他创立了Python语言。
Python历史 • Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC语言的一种继承。 • ABC是由Guido参加设计的一种教学语言(没听说过)。就Guido本人看来,ABC这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido认为是非开放造成的。Guido决心在Python中避免这一错误(的确如此,Python与其它的语言如C,C++和Java结合的非常好)。同时,他还想实现在ABC中闪现过但未曾实现的东西。 • 就这样,Python在Guido手中诞生了(真要感谢他)。实际上,第一个实现是在Mac机上。可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix Shell和C的习惯。
第一门编程语言 • MIT选择Python作为大学第一门编程语言或者专业导引课的主要内容传授。 • MIT 6.00 - Introduction to Computer Science and Programming • http://6.00.scripts.mit.edu/home.cgi • MIT 6.01 - Introduction to EECS I • http://mit.edu/6.01/mercurial/fall10/www/calendar.html
Python特点 • 开源产品,丰富的模块和库 • 良好的粘合语言,它可以调用c和java编写的库 • 代码优雅,风格严谨 (space-sensitive) • Python也被称为是一门清晰的语言。因为它的作者在设计它的时候,总的指导思想是,对于一个特定的问题,只要有一种最好的方法来解决就好了。这在由Tim Peters写的python格言(称为The Zen of Python)里面表述为: • There should be one-- and preferably only one --obvious way to do it.
Backup 备用幻灯