UltraDebug

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: A C D R G Y M Z X S P
公益项目,接受捐赠
查看: 1278|回复: 0
收起左侧

[原创] 将 gdb 调试器用于汇编语言

[复制链接]
ultradebug

主题

0

回帖

UD

管理员

UID
1
积分
2339
注册时间
2021-12-20
最后登录
1970-1-1
2022-5-20 20:15:01 | 显示全部楼层 |阅读模式

清单 10.5 中的程序使用一个 while 循环在屏幕上一次写一个字符“Hello World”。 一个常见的编程错误是创建一个“无限”循环。 如果有一个工具可以让我们在循环中间停止这样的程序,这样我们就可以观察寄存器和内存位置的状态。 这可以帮助我们确定循环控制变量是否按照我们的计划进行更改。

幸运的是,gnu 程序开发环境包括一个调试器 gdb(参见 [zxsq-anti-bbcode-29]),它允许我们这样做。 gdb 调试器允许您将另一个程序加载到内存中并使用 gdb 命令来控制另一个程序(目标程序)的执行并观察其变量的状态。

学习如何使用 gdb 还有另一个非常重要的原因。 这本书描述了寄存器和内存是如何被计算机指令控制的。 gdb 程序是一个非常有价值的学习工具,因为它允许您一次一步地观察每条指令的行为。

gdb 有大量的命令,但以下是本书中最常用的命令

  • li lineNumber — 列出十行源代码,以指定的行号为中心。
  • break sourceFilename:lineNumber — 在源文件的指定行设置断点。当遇到行号时,控制将返回到 gdb。
  • clear lineNumber — 删除指定行号处的断点。
  • run — 开始执行已在 gdb 控制下加载的程序。
  • cont — 继续执行已运行的程序。
  • n — 执行已运行程序的当前源代码语句;如果是对函数的调用,则执行整个函数。
  • s — 执行已运行程序的当前源代码语句;如果是对函数的调用,请单步执行该函数。
  • si — 执行已运行程序的当前(机器)指令;如果是对函数的调用,请单步执行该函数。
  • print expression — 计算表达式并显示值。
  • ir — info registers — 显示寄存器的内容,浮点和向量除外。
  • x/nfs memoryAddress — 以大小为 s 的格式 f 显示(检查)内存中的 n 个值。

这是我如何组装、链接然后使用 gdb 来控制程序的执行并观察其行为的屏幕截图。 用户输入以粗体显示,会话以斜体注释。

bob@ubuntu:~$ as --gstabs -o helloWorld3.o helloWorld3.s
bob@ubuntu:~$ gcc -o helloworld3 helloWorld3.o
bob@ubuntu:~$ gdb helloworld3
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2) 7.4-2012.04
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug repo
还有更多的精彩内容,作者设置为付费后可见
UltraDebug免责声明
✅以上内容均来自网友转发或原创,如存在侵权请发送到站方邮件9003554@qq.com处理。
✅The above content is forwarded or original by netizens. If there is infringement, please send the email to the destination 9003554@qq.com handle.
回复 打印

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|站点地图|UltraDebug ( 滇ICP备2022002049号-2 滇公网安备 53032102000034号)

GMT+8, 2025-6-18 07:05 , Processed in 0.041853 second(s), 11 queries , Redis On.

Powered by Discuz X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表