会员
商店
众包
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
Orlion
https://blog.fanscore.cn
博客园
首页
新随笔
联系
管理
订阅
08 2016 档案
C可变参数的函数
摘要:我们实现一个简单的printf函数(可变参数) 要处理可变参数,需要用C标准库的va_list类型和va_start、va_arg、va_end宏,这些定义在stdarg.h头文件中。我们首先对照反汇编分析在调用myprintf函数时这些参数的内存布局。 myprintf函数的参数布局 这些参数是从
阅读全文
posted @
2016-08-31 08:33
orlion
阅读(1130)
评论(0)
推荐(0)
编辑
虚拟内存管理
摘要:操作系统利用体系结构提供的VA到PA的转换机制实现虚拟内存管理。有了共享库的基础之后我们可以进一步理解虚拟内存管理了。首先分析例子: 【实际与上图存在出入,为方便下面的描述采用原书截图】 用ps命令查看当前终端下的进程,得知bash的进程id是29977,然后用cat /proc/29977/map
阅读全文
posted @
2016-08-30 22:43
orlion
阅读(1385)
评论(0)
推荐(0)
编辑
共享库
摘要:一、编译、链接、运行 目录结构为: |–main.c |–stack |–is_empty.c |–pop.c |–push.c |–stack.c |–stack.h 组成共享库的目标文件和一般的目标文件有所不同,在编译时要加-fPIC选项,例: 【实际以上命令在运行时并没有生成共享库,详见《链接
阅读全文
posted @
2016-08-30 22:41
orlion
阅读(720)
评论(0)
推荐(0)
编辑
[汇编与C语言关系]2. main函数与启动例程
摘要:为什么汇编程序的入口是_start,而C程序的入口是main函数呢?以下就来解释这个问题 在《x86汇编程序基础(AT&T语法)》一文中我们汇编和链接的步骤是: 我们用gcc main.c -o main开编译一个c程序,其实际分为三个步骤:编译、汇编、链接 我们先前在《x86汇编程序基础(AT&T
阅读全文
posted @
2016-08-30 08:22
orlion
阅读(3094)
评论(3)
推荐(1)
编辑
[汇编与C语言关系]3. 变量的存储布局
摘要:以下面C程序为例: 我们在全局作用域和main函数的局部作用域各定义了一些变量,并且引入一些新的关键字const, static, register来修饰变量,那么这些变量的存储空间是怎么分配的呢?我们编译之后用readelf命令看它的符号表,了解各变量的地址分布。下面的清单中原作者把符号表按地址从
阅读全文
posted @
2016-08-30 08:22
orlion
阅读(1044)
评论(0)
推荐(0)
编辑
[汇编与C语言关系]4. 结构体和联合体
摘要:用反汇编的方法研究一下C语言的结构体: main函数中几条语句的反汇编结果如下: 从访问结构体成员的指令可以看出,结构体的四个成员在栈上是这样排列的: 虽然栈是从高地址向低地址增长的,但结构体成员也是从低地址向高地址排列的,这一点和数组类似。与数组不同的是结构体成员之间不是一个紧挨一个排列的,中间有
阅读全文
posted @
2016-08-30 08:22
orlion
阅读(1127)
评论(0)
推荐(0)
编辑
[汇编与C语言关系]5. volatile限定符
摘要:现在研究一下编译器优化会对生成的指令产生什么影响,在此基础上介绍C语言的volatile限定符。首先看下面的C程序: 我们用recv和send这两个全局变量来模拟设备寄存器。假设某平台采用内存映射I/O,串口发送寄存器和串口接收寄存器位于固定的内存地址,而recv和send这两个全局变量也有固定的内
阅读全文
posted @
2016-08-30 08:22
orlion
阅读(567)
评论(0)
推荐(0)
编辑
[汇编与C语言关系]1.函数调用
摘要:对于以下程序: 在编译时加上-g选项,用objdump反汇编时可以把C代码和汇编代码穿插起来显示: 反汇编的结果很长以下是截取要分析的部分: 整个程序的执行过程是main调用foo, foo调用bar, 用gdb跟踪程序的执行,直到bar函数中的int e = c + d;语句执行完毕准备返回时,这
阅读全文
posted @
2016-08-30 08:21
orlion
阅读(1922)
评论(1)
推荐(0)
编辑
C标准I/O库函数与Unbuffered I/O函数
摘要:一、C标准I/O库函数、Unbuffered I/O函数 1. C标准I/O库函数是如何用系统调用的 fopen(3) 调用open(2)打开制定的文件,返回一个文件描述符(一个int类型的编号),分配一个FILE结构体,其中包含该文件的描述符、I/O缓冲区和当前读写位置等信息,返回这个FILE结构
阅读全文
posted @
2016-08-16 18:39
orlion
阅读(1365)
评论(0)
推荐(0)
编辑
ELF文件
摘要:ELF文件格式是一个开发标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型: 可重定位的目标文件 可执行文件 共享库 现在分析一下上一篇文章中经过汇编之后生成的目标文件max.o和链接之后生成的可执行文件max的格式,从而理解汇编、链接和加载执行的过程。 一、目标文件 ELF文件
阅读全文
posted @
2016-08-13 21:10
orlion
阅读(1256)
评论(0)
推荐(1)
编辑
x86汇编程序基础(AT&T语法)
摘要:欢迎访问我的最新博客:https://blog.fanscore.cn 一、简单的汇编程序 以下面这段简单的汇编代码为例 .section .data .section .text .globl _start _start: movl $1, %eax movl $4, %ebx int $0x80
阅读全文
posted @
2016-08-13 21:09
orlion
阅读(38876)
评论(3)
推荐(5)
编辑
【转】Linux C动态内存泄漏追踪方法
摘要:原文:http://www.cnblogs.com/san-fu-su/p/5737984.html C里面没有垃圾回收机制,有时候你申请了动态内存却忘记释放,这就尴尬了(你的程序扮演了强盗角色,有借有还才是好孩子)。当你想找出内存泄露的地方时,有的投入海量的代码中,头痛不已。还好GNU C库提供了
阅读全文
posted @
2016-08-05 08:33
orlion
阅读(3563)
评论(0)
推荐(0)
编辑
公告
点击右上角即可分享