【计算机系统基础1】gdb、gcc简易使用指南
1. 基本实验工具的使用
1.1GCC
在IA-32+LINUX平台
在IA-32+LINUX平台上,编译,调试和运行C语言
为了把C语言源程序编译成IA-32机器指令,X86-64位计算机系统需要先运行下列命令:
sudo apt-get install build-essential module-assistant
sudo apt-get install gcc-multilib g++-multilib
基本的GCC 命令
-E:翻译带#的文件,将头文件内容生成到源文件中。-S:生成汇编文件。-C:生成链接文件,就是组装的模块。

gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.s
gcc -C hello.s -o hello.o
gcc hello.o -o hello
一些其他选项
gcc -O0 -m32 -g hello.c -o hello
-O0: 不用编译优化-m32:编译成x86-32位的指令-g:带调试信息
1.2objdump
- 作用:反汇编二进制的目标文件
objdump -S gdbtest.o > gdbtesto.txt
objdump -S gdbtest > gdbtest.txt
-s:在反汇编后的内容中添加源代码


1.3gdb
启动gdb 调试工具
启动gdb 调试工具,加载要被调试的可执行文件
# 启动方式1:gdb [可执行文件名]
gdb gdbtest
# 启动方式2:1.gdb 2.file [可执行文件名]
gdb
file gdbtest
# 查看源代码
l
设置断点
# 在 main 函数的入口处设置断点
break main # 或者 b main
# 在源程序 gdbtest.c 的第 3 行处设置断点
break gdbtest.c:3
启动程序运行
# 启动程序运行,程序会在断点处停下
run # 或者 r
查看程序运行时的当前状态
程序的当前断点位置
eip寄存器:保存一下条要执行的指令的地址# i r:显示所有寄存器的内容
# i r eip: 只显示寄存器 eip 的内容,64位是rip
i r eip
通用寄存器内容
i r eax ebx ecx edx #(或i r) 显示通用寄存器内容
查看变量的地址
p &a # 查看a的地址
存储器单元内容
x/8xb 0xffffd2bc
x/2xw 0xffffd2bc
各部分含义解释:
语句含义:
栈帧信息
说明: IA-32用栈来支持过程的嵌套调用,过程的入口参数、返回地址,被保存寄存器的值、被调用过程中的非静态局部变量等都会被保存在栈中。
栈帧:系统为每个执行的过程分配一个栈空间。类似于游泳池储物柜的申请和返还

当前栈帧范围:
i r esp ebp # esp栈顶指针、ebp 栈底指针
当前栈帧字节数:
y = R[ebp] - R[esp] + 4举例:

显示当前栈帧内容:
x/yxb $esp # y: R[ebp]-R[esp]+4的值, 栈帧起始地址是esp指向的单元地址; x/zxw $esp # z=y/4, 显示从esp指向的地址开始。
继续执行下一条指令或语句
si # 执行一条机器指令
s # 执行一条C语句
退出
quit
------------恢复内容结束------------
【计算机系统基础1】gdb、gcc简易使用指南的更多相关文章
- GCC 编译优化指南(转)
GCC 编译优化指南(转) http://www.jinbuguo.com/linux/optimize_guide.html 作者:金步国 版权声明 本文作者是一位开源理念的坚定支持者,所以本文虽然 ...
- GCC 编译优化指南
转自: http://www.jinbuguo.com/linux/optimize_guide.html GCC 编译优化指南 作者:金步国[www.jinbuguo.com] 版权声明 本文作者是 ...
- GCC编译优化指南【作者:金步国】
GCC编译优化指南[作者:金步国] GCC编译优化指南 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分 ...
- git简易使用指南
git简易使用指南 Git是一个分布式版本控制/软件配置管理软件,原是Linux内核开发者林纳斯·托瓦兹(Linus Torvalds)为更好地管理Linux内核开发而设计.应注意的是,这与GNU I ...
- 计算机系统基础学习笔记(1)-基本GCC,objdump,GBD命令的使用
基本GCC命令的使用 GCC是一套由GNU项目开发的编程语言编译器,可处理C语言. C++.Fortran.Pascal.Objective-C.Java等等.GCC通常是 跨平台软件的编译器首选.g ...
- [原创]Spring Boot + Mybatis 简易使用指南(一)基础环境搭建
前言 作者: Ant QQ:517377100 相对于使用JdbcTemplate,Mybatis可自动建立pojo类型与数据库列的映射关系,数据库访问层的开发简单了许多 所有数据库访问操作,均封装在 ...
- GCC 编译优化指南【转】
转自:http://www.jinbuguo.com/linux/optimize_guide.html 版权声明 本文作者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布. ...
- js基础练习二之简易日历
今天学到了js基础教程3,昨天的课后练习还没来的及做,这个是类似简易日历的小案例,视频还没听完,今晚继续...... 先看效果图: 其实做过前面的Tab选项卡,这个就很好理解了,通过鼠标放在不同月份月 ...
- linux基础2——gdb调试器
gdb调试器使用的一般步骤(不断更新完善): 1.编译过程中要用-g参数来添加调试符号——gcc test.c -g: 2.gdb启动可执行文件——gdb a.out: 3.出现gdb符号表示启动成功 ...
随机推荐
- 伪元素 Before & Aster
1. html 结构 <label class="is-required" for="name">姓名</label> <inpu ...
- 简单说一说jsonp原理
背景:由于浏览器同源策略的限制,非同源下的请求,都会产生跨域问题,jsonp即是为了解决这个问题出现的一种简便解决方案. 同源策略即:同一协议,同一域名,同一端口号.当其中一个不满足时,我们的请求即会 ...
- 将python脚本打包为exe可执行文件
技术背景 在很多情况下,编程人员是在Linux环境下完成的编程任务,但是更多的使用人员是在Windows环境下的,比方说,在参考链接1的文章中提到: 那么我们就不得不考虑一个环境转化的问题.pytho ...
- 【ACM程序设计】并查集
并查集 并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题.一些常见的用途有:求连通子图.求最小生成树的Kruskal算法和求最近公共祖先( ...
- 建设Kubernetes生产环境的16条建议
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! Kubernetes是用于构建高度可扩展系统的强大工具. ...
- jQuery.extend()[$.extend()]
jQuery.extend(target, object1[,objectN]);jQuery.extend([deep], target, object1[,objectN]);jQuery.ext ...
- Web安全学习笔记 SQL注入下
Web安全学习笔记 SQL注入下 繁枝插云欣 --ICML8 SQL注入小技巧 CheatSheet 预编译 参考文章 一点心得 一.SQL注入小技巧 1. 宽字节注入 一般程序员用gbk编码做开发的 ...
- Node.js躬行记(20)——KOA源码分析(下)
在上一篇中,主要分析了package.json和application.js文件,本文会分析剩下的几个文件. 一.context.js 在context.js中,会处理错误,cookie,JSON格式 ...
- vue大型电商项目尚品汇(前台篇)day02
现在正式回归,开始好好做项目了,正好这一个项目也开始慢慢的开始起色了,前面的准备工作都做的差不多了. 而且我现在也开始慢慢了解到了一些项目才开始需要的一些什么东西了,vuex.router这些都是必备 ...
- CentOS配置epel源
https://opsx.alibaba.com/mirror epel 配置方法 1.备份(如有配置其他epel源) mv /etc/yum.repos.d/epel.repo /etc/yum.r ...






