我正在尝试学习一些程序集并且一直在使用gdb来反汇编简单的程序。但我似乎无法找到这个问题的答案(也许我不知道该寻找什么):每行开头的那些地址究竟是指什么?它们是硬盘上程序中指令的位置吗?还是RAM?
例如:
0x080483dc <+0>: push %ebp
0x080483dd <+1>: mov %esp,%ebp
0x080483df <+3>: sub $0x10,%esp
答案 0 :(得分:2)
那些表示程序存储空间中指令的地址。
在现代操作系统中,每个程序在执行时都会在RAM中分配一个单独的内存空间。然后将二进制文件内存映射到该内存空间。因此,每条指令都有一个地址,并由gdb
反映出来,以便您知道自己在该计划中的位置。
下图说明了进程的内存空间如何:
您可以阅读this文章,了解有关计划和地址空间的更多信息