查看逻辑地址的工具

我是linux系统编程的新手。我的问题是:

  • 运行命令“ nm a.out”时,地址类型是什么? 地址?
  • 是否存在用于查看所有类型地址的linux工具-例如,是否存在用于 查看逻辑地址-线性地址-虚拟地址?
  • 此代码中的地址&x的类型是什么:
    int x;
    printf("%p",&x);
quanta1 回答:查看逻辑地址的工具

在用户空间中,您正在处理线性寻址,其中线性地址==逻辑地址==虚拟地址。换句话说,只有一个地址空间。如果两个指针具有相同的值,则它们将指向内存中的同一对象。

,

在x86_64 CPU中,有3种地址类型:

  • 逻辑地址(0x08:0x12345678):这种地址具有segment:offset格式。段部分控制权限(内核,用户),模式(32位或64位),基本,限制。偏移量部分是该段的偏移量。逻辑->线性地址转换是:线性地址=段基数+偏移量。在64位模式下,所有段都具有base = 0和limit = 0xffffffff,而cpu会忽略此段(fs和gs段除外),这使所有逻辑地址=线性地址

  • 线性地址(虚拟地址):这是现代操作系统使用的地址,因为它对于64位长模式是强制性的

  • 物理地址:先到系统总线再到RAM的地址

关于您的问题:

  • 运行命令“ nm a.out”时地址类型是什么-是逻辑地址吗?

    • 不,这是线性(虚拟)地址
  • 此代码中地址&x的类型是什么:int x; printf(“%p”,&x);

    • 线性(虚拟)地址
  • 是否有Linux工具查看所有类型的地址-例如,是否有工具查看逻辑地址-线性地址-虚拟地址?

    • 否,线性(虚拟)地址->物理地址转换由称为分页结构的结构控制,每个进程都有其中一个。该结构位于内核空间内,并受内核控制,因此用户空间程序无法访问它。但是在调试程序时,您可以看到所有程序线性(虚拟)地址
本文链接:https://www.f2er.com/2554108.html

大家都在问