Linux中的一些指令(gcc与gdb)

    很简单, 虚拟机我用的是Vmwareworkstation和ubuntu系统了。。。关于这个有很多不同的软件的,都可以的!

(一)首先介绍一些关于gdb中的一些调试命令

(1)如何进入gdb调试

     其实这个很简单,下面就具体说一下步骤(通过C语言源程序的方式)

如果是通过汇编语言的话,那么需要先编译链接一下汇编程序,命令如下:

首先(编译):as -g second.asm -o second.o  ----->编译汇编程序(-g 表示的方便后面进行gdb的调试)

其次(链接):ld second.o -o second -------------->链接程序

最后:运行测试:./second  ------------>运行

剩下的就和C语言一样了,因为已经生成了可执行文件(比如上面的second)

  1)首先是编写一个C语言程序(这里命名为test1.c),比如


2)生成可执行文件,命令-------------gcc  test1.c  -o first 

3)运行可执行文件,这样能够测试程序是否正确(如果运行结果与期望值一样,或者没有运行错误即表示正确)。命令------------./first

方法一:

4)进入gdb模式,直接命令--------gdb

5)出现如下图所示的结果,也就是等待用户输入gdb命令。

6)然后加载需要进行gdb调试的可执行文件即可(这里的文件名和之前的对应就可以)。命令-------file first 

     7)OK,到这就已经成功进入了gdb模式。

方法二:(前面3步都是一样的)

4)直接命令---------gdb first,然后进入的就和上面的一样了。

上面的两种方法都可以,其实实质是一样的,只是一个是后面加载文件(第一种方法),而另一种是提前加入文件(第二种)

(2)关于gdb模式的一些基本命令

这里还加入两条特别又重要的命令吧!

objdump -d second ------------------->显示程序的内存和代码对应的机器指令(非gdb命令)
gdb second  ---------------->将程序second进入gdb的调试(非gdb命令)


下面的就都是gdb的命令了哦!!!

缩写:

breakpoint------------------b

delete-------------------------------d

infomation------------------------info

run---------------------------------r

next---------------------------------n

step--------------------------------s

print--------------------------------p

quit--------------------------------q

--------------------------------------------------------------------------------------------------------------------------------------------------------------

b *_start+1 ------------->加断点,在某个地方,+1表示第一行程序的位置

b   行数------------------>打断点,比如b 8

b    函数名------------->打断点,比如 b  main

b    代码地址---------->打断点,比如 b *0x804835c

d ------------------->删除所有断点

d  断点编号---------->删除第几个断点

info br     -------------->查看所有断点信息

r-------------------->运行程序(如果没有断点,则直接运行完整个程序,否则在断点处停止)

c------------------>Continue的简写,继续执行被调试程序,直至下一个断点或程序结束。

n------------------->单步运行一句代码(如果有函数,则直接运行完整个函数)

s------------------>单步运行一句代码(如果有函数,则会进入函数)

info reg----------->查看寄存器的内容(简写为 i r)

info r  寄存器名---------->查看具体的某一个寄存器的内容(比如 info r eax
x/4bt  0x804855(内存地址起始)-------------->表示的是显示内存的内容地址
p  变量名--------------->打印显示对应变量的内容

p  $eax ------------------->打印显示查看寄存器eax中的值
p  &eax ------------------->打印显示查看寄存器eax中的内存地址

display /i $pc----------->每次程序中断后可以看到即将被执行的下一条汇编指令,其中 $pc 代表当前汇编指令,/i 表示以十六进行显示。当需要关心汇编代码时,此命令相当有用。
undispaly---------------->取消先前的display设置,编号从1开始递增。

q---------------------->退出gdb调试

help [命令名称]------------>GDB帮助命令,提供对GDB名种命令的解释说明。如果指定了“命令名称”参数,则显示该命令的详细说明;如果没有指定参数,则分类显示所有GDB命令,供用户进一步浏览和查询。

(三)编辑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 hello.c -lm -o hello


简单快速的编译运行方法:
gcc hello.c -o hello(其中hello表示为你要运行后的名字)
./hello  --->表示运行

(四)汇编程序的运行

首先(编译):as -g second.asm -o second.o  ----->编译汇编程序(-g 表示的方便后面进行gdb的调试)

其次(链接):ld second.o -o second -------------->链接程序

最后:运行测试:./second  ------------>运行



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值