linux应用程序地址布局 在学习Linux应用程序开发时,经常会遇到如下概念:代码段.数据段.BSS段(Block Started by Symbol,又名:未初始化数据段).堆(heap)和栈(stack).而这些部分也是构成Linux应用程序的重要组成部分. 一.内存布局 1.从低地址到高地址分别为:代码段.数据段.BSS段.堆.栈 2.堆向高内存地址生长 3.栈向低内存地址生长 二.数据存放 1.代码段:代码,全局常量(const).字符串常量   2.数据段:全局变量(初始化以及未初始…
Linux应用程序在内存中的布局,由高地址到低地址依次为:栈.堆.BSS段.数据段.代码段.代码段的起始地址固定为0x8048000,无论哪一个应用程序它的代码段起始地址一定是0x8048000,这里的地址虚拟地址,映射到不同的物理地址中去. 查看程序各段的地址 ps    aux     这个命令用于查看进程的ID,比如我运行一个可执行程序addr 可以看到addr的进程ID是24048.然后用cat命令查看进程在内部的布局 cat    /proc/进程ID/maps,这里我们是cat   …
程序构成 代码段.数据段.BSS段(Block Started by Symbol,又叫:未初始化数据段).堆(heap)和栈(stack).这些部分构成了Linux应用程序的重要组成部分. 内存布局 1.从低地址到高地址分别为:代码段(0x8048000).数据段.BSS段.堆.栈. 2.堆向高内存地址生长. 3.栈向低内存地址生长. 查看程序段地址 cat /proc/进程号/maps 数据存放 1.代码段:全局常量 2.数据段:全局变量(初始化的以及未初始化的).静态变量(全局的和局部的,…
程序构成 在学习Linux应用程序开发时,经常会遇到如下概念: 代码段.数据段.BSS段(Block Started by Symbol,又名:未始化数据段) .堆(heap)和栈(stack).始化数据段) .堆(heap)和栈(stack).而这些部分也是构成Linux应用程序的重要组成部. 1.从低地址到高地址分别为:代码段.数据段.BSS段.堆.栈 2.堆向高内存地址生长3.栈向低内存地址 数据存放 1.代码段:代码,全局常量(const).字符串常量 2.数据段:全局变量(初始化以及未…
应用程序调试工具gdb学习使用 一.GDB简介 GDB 是 GNU 发布的一款功能强大的程序调试工具.GDB 主要完成下面三个方面的功能: 1.启动被调试程序. 2.让被调试的程序在指定的位置停住. 3.当程序被停住时,可以检查程序状态(如变量值). 1.1gdb使用流程 1.编译生成可执行文件: gcc –g tst.c -o tst2.启动 GDB gdb tst(文件名)3. 在 main 函数处设置断点 break main4. 运行程序 run5. 利用更加丰富的 gdb 命令对程序进…
静态/动态函数库设计 Linux应用程序设计中需要的外部函数主要由函数库和系统调用来提供. 两者区别: 一.函数库分类 函数库按照链接方式可分为: 1.静态链接库 对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件 (executable file).程序 在运行 时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下.所以这些函数库被成为静态库(static libaray),…
linux驱动程序设计的硬件基础(一) 本章讲总结学习linux设备程序设计的硬件基础. 一.处理器 1.1通用处理器 通用处理器(GPP)并不针对特定的应用领域进行体系结构和指令集的优化,它们具有一般化的通用体系结构和指令集,以支持复杂的运算并易于新开发功能的添加.一般而言,在嵌入式微控制器(MCU)和微处理器(MPU)中会包含一个通用处理器核.  MPU 通常代表一个 CPU(中央处理器) ,而 MCU 则强调把中央处理器.存储器和外围电路集成在一个芯片中.嵌入式微控制器一般由一个 CPU…
linux内核的组成 一.linux内核源代码目录结构 arch: 包含和硬件体系结构相关的代码, 每种平台占一个相应的目录, 如 i386.ARM.PowerPC.MIPS 等. block:块设备驱动程序 I/O 调度. crypto:常用加密和散列算法(如 AES.SHA 等) ,还有一些压缩和 CRC 校验算法. Documentation:内核各部分的通用解释和注释. drivers:设备驱动程序,每个不同的驱动占用一个子目录,如 char.block.net.mtd .i2c 等.…
linux设备驱动学习-1 本章节主要学习有操作系统的设备驱动和无操作系统设备驱动的区别,以及对操作系统和设备驱动关系的认识. 一.设备驱动的作用 对设备驱动最通俗的解释就是“驱使硬件设备行动” .设备驱动与底层硬件直接打交道, 按照硬件设备的具体工作方式读写设备寄存器, 完成设备的轮询. 中断处理.DMA 通信,进行物理内存向虚拟内存的映射,最终使通信设备能够收发数据,使显示设备能够显示文字和画面,使存储设备能够记录文件和数据.此可见,设备驱动充当了硬件和应用软件之间的纽带,它使得应用软件只需…
共享内存同行 一.共享内存概念 共享内存是IPC机制中的一种,它允许两个不相关的进程访问同一段内存, 这是传递数据的一种非常有效的方式. 二.函数学习 这里主要有创建共享内存.映射共享内存.分离共享内存.控制共享内存 2.1创建/打开共享内存 1).函数名 shmget 2).函数原型 int shmget(key_t key,size_t size,int shmflg) 3).函数功能 创建或者获取共享内存,并返回描述符id 4).所属头文件 <sys/ipc.h><sys/shm.…