linux /proc/kcore

文章目录

  • 前言
  • 一、简介
  • 二、读取/proc/kcore数据


前言

/proc/kcore 是 vmlinux在内存中的动态映像,可以使用gdb,objdump,crash等工具对其进行调试,从而获取当前系统内存中的数据。

一、简介

  1. Linux /proc/kcore详解(一)

二、读取/proc/kcore数据

下面我们将介绍如何从/proc/kcore中找到想要的数据。
首先和大多数ELF文件一样,/proc/kcore中也包含了ELF Header, Program Headers等信息。
使用readelf -l查看程序头信息,

root@A029129-PC:~# readelf -l /proc/kcore

Elf file type is CORE (Core file)
Entry point 0x0
There are 10 program headers, starting at offset 64

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  NOTE           0x0000000000000270 0x0000000000000000 0x0000000000000000
                 0x0000000000001d24 0x0000000000000000         0x0
  LOAD           0x00007fff81002000 0xffffffff81000000 0x0000000001000000
                 0x0000000002a2c000 0x0000000002a2c000  RWE    0x1000
  LOAD           0x0000490000002000 0xffffc90000000000 0xffffffffffffffff
                 0x00001fffffffffff 0x00001fffffffffff  RWE    0x1000
  LOAD           0x00007fffc0002000 0xffffffffc0000000 0xffffffffffffffff
                 0x000000003f000000 0x000000003f000000  RWE    0x1000
  LOAD           0x0000088000003000 0xffff888000001000 0x0000000000001000
                 0x000000000009f000 0x000000000009f000  RWE    0x1000
  LOAD           0x00006a0000002000 0xffffea0000000000 0xffffffffffffffff
                 0x0000000000003000 0x0000000000003000  RWE    0x1000
  LOAD           0x0000088000202000 0xffff888000200000 0x0000000000200000
                 0x00000000f7e00000 0x00000000f7e00000  RWE    0x1000
  LOAD           0x00006a000000a000 0xffffea0000008000 0xffffffffffffffff
                 0x0000000003df8000 0x0000000003df8000  RWE    0x1000
  LOAD           0x0000088100002000 0xffff888100000000 0x0000000100000000
                 0x0000000105000000 0x0000000105000000  RWE    0x1000
  LOAD           0x00006a0004002000 0xffffea0004000000 0xffffffffffffffff
                 0x0000000004140000 0x0000000004140000  RWE    0x1000

通过程序头信息我们可以得到VirtAddr和Offset之间的对应关系。
计算出符号在对应程序段之间的偏移,加上该程序段在文件中的偏移即可得到该符号在文件中的地址。
现在假设我们想要查看ext4_readdir在内存中的数据,

  1. 首先我们通过/proc/kallsyms查看ext4_readdir在内存中的地址
root@A029129-PC:~# cat /proc/kallsyms | grep ext4_readdir
ffffffff813bd750 t ext4_readdir
  1. 计算符号在程序段中的偏移:vOffset = ffffffff813bd750 - 0xffffffff81000000(VirtAddr)
  2. 计算符号在文件中的地址:addr = vOffset + 0x00007fff81002000(FileSiz)

读取addr数据,即为ext4_readdir在内存中的真实数据,该数据可以判断系统内存中是否存在攻击。

你可能感兴趣的:(linux,内核安全)