我是linux系统编程的新手。我的问题是:
- 运行命令“ nm a.out”时,地址类型是什么? 地址?
- 是否存在用于查看所有类型地址的linux工具-例如,是否存在用于 查看逻辑地址-线性地址-虚拟地址?
- 此代码中的地址&x的类型是什么:
int x;
printf("%p",&x);
在用户空间中,您正在处理线性寻址,其中线性地址==逻辑地址==虚拟地址。换句话说,只有一个地址空间。如果两个指针具有相同的值,则它们将指向内存中的同一对象。
,在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工具查看所有类型的地址-例如,是否有工具查看逻辑地址-线性地址-虚拟地址?