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

来源:互联网 发布:7u分享网络微信打不开 编辑:程序博客网 时间:2024/04/30 06:33

        我想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 0
原创粉丝点击