as汇编基础程序设计--gdb调试汇编

        我想gdb对于在Linux系统下开发的程序员来说是再熟悉不过的了,因为在Linux下比较少的IDE环境来调试代码,所以调试linux下的代码就那么几种方法的,其中gdb调试是最有效,尤其是一些逻辑上的bug。gdb还有个强大功能就是调试as汇编代码,今天来简单的看下gdb的使用。        

.section .data    
          outputi:
             .ascii "hello word!\n" 
 
 .section .text  
 
 .global _start 
 _start:    
     movl $4, %eax
     movl $1, %ebx
     movl $outputi, %ecx
     movl $13, %edx
     int $0x80
 
     movl $1, %eax
     movl $0, %ebx
     int $0x80
        上面代码是打印hello word的例子,其中去除掉了一些无关的代码。

        为了使用gdb调试,所以在编译时要加入gdb的一些调试信息:as -gstabs -o test.o test1.s(c语言中gcc -g -o test test.c),链接为:ld -o test test.o;

        开始命令:gdb  test;

        设置断点:break *_start  + 1(cpu运行到 _start+1 的地址上会停止,break可以简写b)

        开始运行:run (会运行到第一个断点位置上,一般和断点一起使用)

        单步调试:step (会一行一行执行代码,遇到函数会进入函数中执行,step可以简写s)

        单步调试:next (和上面的命令类似但,但遇到函数不会进入,直接跳过函数,next可以简写n)

        顺序执行:cont (当把问题解决后,想直接运行完,可以使用该命令)

        查看所有寄存器:info registers (查看所有寄存器的状态)

        查看单个寄存器:print (查看单个寄存器,其中可以定义输出格式,x=十六进制、d=十进制、o=八进制、t=二进制,print/x $eax,因为eax中是一个立即数了,所以用$)

        查看指定内存数据:x (x/nyz,n表示需要打印的字符数,y表示输出格式和print格式一样,z表示按多少长度来显示,x/16cb &outputi:16字节,字符格式输出,字节宽度显示,&outputi:outputi是标签表示地址,所以用&起地址上内容显示)

        实例操作如下图:

        

        gdb对汇编调试方法基础的就这些,还有稍微复杂些的,等到后面要使用的时候自己再查资料。

        转载请注明作者和原文出处,原文地址:http://blog.csdn.net/yuzhihui_no1/article/details/42584283    

        

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值