Assembly gdb中的地址到底是什么?

Assembly gdb中的地址到底是什么?,assembly,gdb,disassembly,Assembly,Gdb,Disassembly,我试图学习一些汇编语言,并一直在使用gdb来反汇编简单的程序。但我似乎找不到这个问题的答案(也许我不知道该找什么):每行开头的地址到底指的是什么?它们是硬盘上程序中指令的位置吗?还是公羊 例如: 0x080483dc <+0>: push %ebp 0x080483dd <+1>: mov %esp,%ebp 0x080483df <+3>: sub $0x10,%esp 0x080483dc:推送%ebp 0x080483

我试图学习一些汇编语言,并一直在使用gdb来反汇编简单的程序。但我似乎找不到这个问题的答案(也许我不知道该找什么):每行开头的地址到底指的是什么?它们是硬盘上程序中指令的位置吗?还是公羊

例如:

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

指示程序内存空间中指令的地址

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

下图说明了进程的内存空间的外观:


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

是什么决定了地址从何处开始(我假设它显然不是0x0)?每次运行程序时,它们都会改变吗?虚拟地址空间的起始地址始终为0,结束地址为4GB。但是,地址空间(文本段)中可执行文件的起始地址可能不是,它由操作系统实现决定。另请参阅