我有一个奇怪的ELF二进制文件。我可以在32位linux中运行此二进制文件。

但是,如果我使用IDA反汇编程序打开此二进制文件,则IDA会显示“无效入口点”。

readelf的结果如下:

root@meltdown-VirtualBox:/home/meltdown# readelf -S -l SimpleVM

There are no sections in this file.

Elf file type is EXEC (Executable file)
Entry point 0xc023dc
There are 2 program headers, starting at offset 52

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x000000 0x00c01000 0x00c01000 0x013c7 0x013c7 RWE 0x1000
  LOAD           0x00019c 0x0804b19c 0x0804b19c 0x00000 0x00000 RW  0x1000

没有节。我以为这个二进制文件已打包。但是,第一个LOAD段的最后一个虚拟地址为0xc023c7。入口点的虚拟地址为0xc023dc,超出范围...

有人可以告诉我怎么回事吗?

先感谢您。
  • /proc/PID/maps如下(已创建两个进程...)
    root@meltdown-VirtualBox:/proc/3510# cat maps
    00110000-00111000 rwxp 00000000 00:00 0
    006c0000-006c1000 r-xp 00000000 00:00 0          [vdso]
    007d2000-007d4000 rwxp 00000000 00:00 0
    00c01000-00c02000 rwxp 00000000 08:01 3801242    /home/meltdown/SimpleVM
    00ca4000-00e43000 r-xp 00000000 08:01 17171359   /lib/i386-linux-gnu/libc-2.15.so
    00e43000-00e45000 r-xp 0019f000 08:01 17171359   /lib/i386-linux-gnu/libc-2.15.so
    00e45000-00e46000 rwxp 001a1000 08:01 17171359   /lib/i386-linux-gnu/libc-2.15.so
    00e46000-00e49000 rwxp 00000000 00:00 0
    08048000-0804b000 r-xp 00000000 00:00 0
    0804b000-0804c000 rwxp 00000000 00:00 0
    b77a7000-b77c7000 r-xp 00000000 08:01 17171339   /lib/i386-linux-gnu/ld-2.15.so
    b77c7000-b77c8000 r-xp 0001f000 08:01 17171339   /lib/i386-linux-gnu/ld-2.15.so
    b77c8000-b77c9000 rwxp 00020000 08:01 17171339   /lib/i386-linux-gnu/ld-2.15.so
    bfa90000-bfab1000 rwxp 00000000 00:00 0          [stack]
    
    root@meltdown-VirtualBox:/proc/3511# cat maps
    00110000-00111000 rwxp 00000000 00:00 0
    006c0000-006c1000 r-xp 00000000 00:00 0          [vdso]
    007d2000-007d4000 rwxp 00000000 00:00 0
    00c01000-00c02000 rwxp 00000000 08:01 3801242    /home/meltdown/SimpleVM
    00ca4000-00e43000 r-xp 00000000 08:01 17171359   /lib/i386-linux-gnu/libc-2.15.so
    00e43000-00e45000 r-xp 0019f000 08:01 17171359   /lib/i386-linux-gnu/libc-2.15.so
    00e45000-00e46000 rwxp 001a1000 08:01 17171359   /lib/i386-linux-gnu/libc-2.15.so
    00e46000-00e49000 rwxp 00000000 00:00 0
    08048000-0804b000 r-xp 00000000 00:00 0
    0804b000-0804c000 rwxp 00000000 00:00 0
    b77a7000-b77c7000 r-xp 00000000 08:01 17171339   /lib/i386-linux-gnu/ld-2.15.so
    b77c7000-b77c8000 r-xp 0001f000 08:01 17171339   /lib/i386-linux-gnu/ld-2.15.so
    b77c8000-b77c9000 rwxp 00020000 08:01 17171339   /lib/i386-linux-gnu/ld-2.15.so
    bfa90000-bfab1000 rwxp 00000000 00:00 0          [stack]
    
  • 最佳答案

    这可能是由于映射长度的粒度。映射的长度将四舍五入为页面大小的倍数。在我的系统上,页面大小为4k,因此映射将四舍五入为4k,并包含入口点。即使页面大小为1k,长度也将舍入为0x1400,足以包含入口点。如果文件足够长,则多余的字节可能来自文件而不是页面初始化。

    关于linux - 奇怪的ELF二进制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14144786/

    10-16 20:29