用gdb或者objdump等工具在保护模式下是否能看到真实的物理地址

时间:2021-02-04 16:41:14
(gdb) disassemble 
Dump of assembler code for function main:
    0x08048410 <+0>: push   %ebp
   0x08048411 <+1>: mov    %esp,%ebp
   0x08048413 <+3>: and    $0xfffffff0,%esp
   0x08048416 <+6>: sub    $0x1a0,%esp
=> 0x0804841c <+12>: movl   $0xa,0x4(%esp)
   0x08048424 <+20>: movl   $0x1,(%esp)
   0x0804842b <+27>: call    0x80483e4 <add_range>
   0x08048430 <+32>: mov    %eax,0x10(%esp)
这两个应该是线性地址不是真实的物理地址吧?
包括用objdump反汇编的这两个地址?
8048475: 89 04 24              mov    %eax,(%esp)
 8048478: e8 97 ff ff ff        call    8048414 <prime>
 804847d: 85 c0                 test   %eax,%eax
 804847f: 74 4e                 je     80484cf <main+0x81>
 8048481: b8 d0 85 04 08        mov    $0x80485d0,%eax
 8048486: 8b 54 24 18           mov    0x18(%esp),%edx
 804848a: 89 54 24 04           mov    %edx,0x4(%esp)
 804848e: 89 04 24              mov    %eax,(%esp)
 8048491: e8 8a fe ff ff        call    8048320 <printf@plt>

3 个解决方案

#1


就是说这些地址在指令执行的时候还要经过硬件从线性地址转化成物理地址?

#2


看不到吧,保护模式下汇编只能操作虚拟地址

#3


看不到,你必须要用内核提供的函数或者自己转换页表。

#1


就是说这些地址在指令执行的时候还要经过硬件从线性地址转化成物理地址?

#2


看不到吧,保护模式下汇编只能操作虚拟地址

#3


看不到,你必须要用内核提供的函数或者自己转换页表。