【问题标题】:What exactly are the addresses in a gdb disassemble?gdb 反汇编中的地址到底是什么?
【发布时间】:2014-09-18 03:59:43
【问题描述】:

我正在尝试学习一些汇编,并且一直在使用 gdb 反汇编简单的程序。但是我似乎找不到这个问题的答案(也许我不知道要寻找什么):每行开头的那些地址到底指的是什么?它们是硬盘驱动器上程序中指令的位置吗?还是内存?

例如:

   0x080483dc <+0>: push   %ebp
   0x080483dd <+1>: mov    %esp,%ebp
   0x080483df <+3>: sub    $0x10,%esp

【问题讨论】:

标签: assembly gdb disassembly


【解决方案1】:

那些表示程序内存空间中指令的地址。

在现代操作系统中,每个程序在执行时都会在 RAM 中分配一个单独的内存空间。然后二进制文件被内存映射到该内存空间。所以每条指令都有一个地址,并由gdb 反映,以便您知道您在程序中的位置。

下图说明了一个进程的内存空间是怎样的:

您可以阅读this 文章以了解有关程序和地址空间的更多信息

【讨论】:

  • 什么决定了地址从哪里开始(我假设它显然不是 0x0)?每次运行程序时它们都会改变吗?
  • 虚拟地址空间的起始地址始终为0,结束为4GB。但是,地址空间(TEXT段)中可执行文件的起始地址可能不是,由OS实现决定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 2014-03-15
  • 1970-01-01
相关资源
最近更新 更多