免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2238 | 回复: 0
打印 上一主题 下一主题

如何用gdb调试nasm语法的汇编程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-11 16:58 |只看该作者 |倒序浏览
gdb调试汇编
首先看一个最基本的nasm语法汇编程序hello.asm: section .text
global main
main:
mov eax,4 ;4号调用
mov ebx,1 ;ebx送1表示stdout
mov ecx,msg ;字符串的首地址送入ecx
mov edx,14 ;字符串的长度送入edx
int 80h ;输出字串
mov eax,1 ;1号调用
int 80h ;结束
msg:
db "Hello World!",0ah,0dh
我们想调用gdb进行调试,该怎么办呢?
请看下面的示例:
[root@localhost asm]# nasm -f elf hello.asm -g -F stabs
[root@localhost asm]# gcc -o hello hello.o -g
[root@localhost asm]# gdb hello            
eflags 0x246 [ PF ZF IF ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51
(gdb) n        : 72 'H' 101 'e' 108 'l' 108 'l' 111 'o'
(gdb) n
9 int 80h ;输出字串
(gdb) n
Hello
10 mov eax,1 ;1号调用
(gdb) n
11 int 80h ;结束
(gdb) n
Program exited with code 01.
(gdb)
gdb 基本命令
    gdb 支持很多的命令使你能实现不同的功能. 这些命令从简单的文件装入到允许你检查所调用的堆栈内容的复杂命令, 表27.1列出了你在用 gdb 调试时会用到的一些命令. 想了解 gdb 的详细使用请参考 gdb 的指南页.
命  令    描  述
file    装入想要调试的可执行文件.
kill    终止正在调试的程序.
list    列出产生执行文件的源代码的一部分.
next    执行一行源代码但不进入函数内部.
step    执行一行源代码而且进入函数内部.
run    执行当前被调试的程序
quit    终止 gdb
watch    使你能监视一个变量的值而不管它何时被改变.
break    在代码里设置断点, 这将使程序执行到这里时被挂起.
make    使你能不退出 gdb 就可以重新产生可执行文件.
shell    使你能不离开 gdb 就执行 UNIX shell 命令.
还可以用print命令显示某个寄存器的值,例如:print $eax
  print/d $reg  以十进制显示reg的值
  print/t $reg  二进制
  print/x $reg  十六进制
x命令用来显示特定内存位置的值,格式如下:
  x/nyz          n是要显示的字段数,y是输出格式(c字符,x是16进制,d是十进制),z是字段长度(b字节,h半字,w32位字)
例如,x/42cb &output就是以字符模式显示output变量前42字节的值。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/100407/showart_1993253.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP