代码阅读与实践 Lecture 2 主讲人:胡亚斌

Slides:



Advertisements
Similar presentations
Linux 系统. 操作系统发展需求 1 没有操作系统 2 简单批处理操作系统 3 多道程序设计的批处理 4 多道程序设计的分时操作系统 5 多处理机并行系统 6 网络操作系统 7 分布式操作系统.
Advertisements

必修2 第一单元 古代中国经济的基本结构和特点
董笑菊 电子信息与电气工程学院 计算机科学与工程系
——Windows98与Office2000(第二版) 林卓然编著 中山大学出版社
C语言程序设计 主讲教师 :张群燕 电话:
牡丹江旅游景点介绍.
個人傷害險-鐵馬逍遙專案 商品介紹 商品特色 保障內容 承保對象 保險費 案例 業務費用及淨業績 車險部業務規劃科.
中学生社会适应问题及其调适.
長高 長壯 ㄋㄟㄋㄟ補給站 每天2份奶~~健康跟著來!.
全国国际商务英语考试(一级) 口试操作流程 全国国际商务英语考试中心 中国国际贸易学会商务专业培训考试办公室 2016年
计算机与程序.
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
第三单元 发展社会主义民主政治.
3.3 资源的跨区域调配 ——以南水北调为例 铜山中学 李启强.
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
何娜 求职经验交流 何娜
安全知识讲座 铁前实验室.
勾股定理 说课人:钱丹.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
第10讲 Java面向对象编程基础(4) 教学目标 主要内容.
上海浦东国际机场二期飞行区及配套设施 (第二跑道)工程东区货运设施过渡工程 施工进度实施情况的分析
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
OpenMP简介和开发教程 广州创龙电子科技有限公司
中国科学技术大学计算机系 陈香兰(0512- ) Spring 2011
嵌入式系统课程简介 宋健建 南京大学软件学院 2004/02/10.
张吉豫 GNU编译工具链使用简介 张吉豫
R in Enterprise Environment 企业环境中的R
第 5 章、連結與載入 作者:陳鍾誠 旗標出版社.
2018/12/3 C++程序链接过程简介 杨森 2018/12/3.
存储系统.
SVN服务器的搭建(Windows) 柳峰
Python ——谁说简洁就不能强大? Gingko Studio.
走进编程 程序的顺序结构(二).
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512- )
中国科学技术大学计算机系 陈香兰(0512- ) Autumn 2010
人教版数学四年级(下) 乘法分配律 单击页面即可演示.
逆向工程-汇编语言
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
Unit 11.Operating System 11.1 What’s OS 11.2 Related Courses
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
信号量(Semaphore).
本节内容 Private Memory 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
<编程达人入门课程> 本节内容 计算机编程语言 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
9.1.2不等式的性质 周村实验中学 许伟伟.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二节 C语言的特点.
_08文件操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
大数据应用人才培养系列教材 Python语言 刘 鹏 张 燕 总主编 李肖俊 主编 刘 河 钟 涛 副主编.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
学习数据结构的意义 (C语言版) 《数据结构》在线开放课程 主讲人:李刚
实验六、COM类型病毒分析实验 实验开发教师: 刘乃琦 谌黔燕.
Presentation transcript:

代码阅读与实践 Lecture 2 主讲人:胡亚斌 E-mail:yabin.hwu@gmail.com 大规模集成电路设计应用与实践 系列课程之 代码阅读与实践 Lecture 2 主讲人:胡亚斌 E-mail:yabin.hwu@gmail.com

第一次课的回顾 编程范型: 程序语言世界的世界观与方法论 语言的多样性,动态语言与静态语言 C++ —— 范型编程 体系结构的学习对程序员很重要 最重要的能力 —— 抽象 搜索新词汇的方法 —— wikipedia Top Level CS program 高水平的CS课程

课程内容 知识背景 HelloWorld的前世今生 1 2 本次课的目的 1.介绍相关背景知识 2.引入代码阅读的观念: 代码阅读关心代码整个生命周期 3.介绍代码阅读的常用工具

知识背景 代码 生命周期 内存模型 目标文件 编译与链接

HelloWorld的前世今生 HelloWorld源代码 汇编实验 链接实验 目标文件实验

知识背景之 编译与链接

编译与链接 a.c b.c … x.c a.s b.s … x.s a.o b.o … x.o printf.o … Hello.exe 高级语言程序 a.c b.c … x.c 编译器 汇编语言程序 a.s b.s … x.s 汇编器 目标文件 a.o b.o … x.o printf.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 源常量 C7 05 00 00 00 00 2a 00 00 00 重定位入口 目标地址 在链接阶段,链接器会在重定位入口位置,填上正确的值

目标文件格式 链接视图 执行视图 ELF头部 程序头部表(可选) 程序头部表 节区1 段1 … 节区n 段2 节区头部表 节区头部表(可选)

ELF头部 文件的最开始几个字节给出如何解释文件的提示信息。 该信息独立于处理器,也独立于文件的其余内容 魔数

ELF节区 代码段(.code, Code Section) 数据段(.data, Data Section) BSS段(.bss) 存放编译后得到的指令 数据段(.data, Data Section) 存放全局变量和局部静态变量数据 BSS段(.bss) 存放未初始化的全局变量和局部静态变量

程序与目标文件 可执行文件或目标文件 File Header .text section .data section int global_init_var = 84; int global_uninit_var; void func1(int i) { printf("%d\n", i); } int main(void) static int static_var = 85; static int static_var2; int a = 1; int b; func1(static_var + static_var2 + a); return 0; 可执行文件或目标文件 File Header .text section .data section .bss section

知识背景之 内存: 堆与栈

Section(.init, .rodata, .text) Linux内存空间布局图 0xffffffff 内核空间 0xC0000000 栈 stack unused 进程逻辑地址 动态链接库 0x40000000 unused 堆 读写节区 Section(.data, .bss) 只读节区 Section(.init, .rodata, .text) 0x08048000 researved

栈与函数调用

堆 堆是一段连续的虚拟地址空间。 应用程序在堆中可以动态地分配、释放所需大小的内存块。 在堆内分配内存块可以是任意大小的,而直接分配内存就必须以内存页为单位。 在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 UIUC, stanford选择了Java

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.

Thank you

Backup 备用幻灯