• linux /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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

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

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

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

  • 相关阅读:
    鲁棒实验设计(ED-最优设计)
    STCH8高级PWM定时器输入捕获功能脉宽测量
    有求必应 | 听说这个管线排布,横竖都行?
    [SS528V100 22AP30 Hi3531DV200开发注意事项]
    Ovalbumin-PEG-NTA/TPP 鸡卵白蛋白-聚乙二醇-次氮基三乙酸/磷酸三苯酯
    Spring依赖注入提示:Field injection is not recommended
    汇编基础(2) -- ARM64
    [pyqt5]No module named ‘PyQt5.QtMultimedia
    微服务中的服务发现是什么?
    如何快速区分GPT-3.5 与GPT-4?
  • 原文地址:https://blog.csdn.net/SGchi/article/details/132760502