zoukankan      html  css  js  c++  java
  • 32bit / 64bit co-exist Linux, ld-linux.so, linux-gate.so.1 etc

    before this, confirm that you don't have 32bit libs notably 32bit libc, e.g. you have 

    /lib64/ld-linux-x86-64.so.2 but not /lib32/ld-linux.so.2

    https://wiki.debian.org/Multiarch 

    run following on Debian 64bit to add basic support for 32bit programs (anyway you need ld-linux at least...)

    dpkg --add-architecture i386;
    aptitude install libc6-i386 libc6-dev-i386  (note that don't use libc6:i386 otherwise apt thinks you'd use libc-i386 as the main libc)

    write a simple "hello world", and compile with different flags

    gcc -m32 hello.c -o hello32
    ldd hello32
            linux-gate.so.1 (0xf7765000)
            libc.so.6 => /lib32/libc.so.6 (0xf75a2000)
            /lib/ld-linux.so.2 (0xf7766000)
    
    
    gcc -m64 hello.c -o hello64
    ldd hello64
            linux-vdso.so.1 (0x00007fff1cfa4000)
            libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe71d001000)
            /lib64/ld-linux-x86-64.so.2 (0x00007fe71d3c1000)

    What is ld-linux.so.2?

    This program is defined as part of the structure of the ELF file, in the INTERP section of the program header. For 32bit linux binaries, this is the typical name of the 32bit interpreter. For 64bit binaries, you'll find it is typically called ld-linux-x86_64.so.2 (for 64bit x86 platforms).

    You can determine this information yourself using readelf -l, and the INTERP section:

    INTERP         0x0000000000000238 0x0000000000400238 0x0000000000400238
                   0x000000000000001c 0x000000000000001c  R      1
        [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

    What is linux-gate.so.1? very good article on this: http://www.trilithium.com/johan/2005/08/linux-gate/

    there's not supposed to be a linux-gate.so.1 file present anywhere on the file system; it's a virtual DSO (dynamic shared object), a shared object exposed by the kernel at a fixed address in every process' memory:
    http://en.wikipedia.org/wiki/VDSO

    for example, run "cat /proc/self/maps" and it'll give the memory layout of cat process

    cat /proc/self/maps
    00400000-0040b000 r-xp 00000000 08:01 403141                             /bin/cat
    0060a000-0060b000 r--p 0000a000 08:01 403141                             /bin/cat
    0060b000-0060c000 rw-p 0000b000 08:01 403141                             /bin/cat
    02376000-02397000 rw-p 00000000 00:00 0                                  [heap]
    7fb1eabf3000-7fb1ead93000 r-xp 00000000 08:01 391959                     /lib/x86_64-linux-gnu/libc-2.18.so
    7fb1ead93000-7fb1eaf92000 ---p 001a0000 08:01 391959                     /lib/x86_64-linux-gnu/libc-2.18.so
    7fb1eaf92000-7fb1eaf96000 r--p 0019f000 08:01 391959                     /lib/x86_64-linux-gnu/libc-2.18.so
    7fb1eaf96000-7fb1eaf98000 rw-p 001a3000 08:01 391959                     /lib/x86_64-linux-gnu/libc-2.18.so
    7fb1eaf98000-7fb1eaf9c000 rw-p 00000000 00:00 0
    7fb1eaf9c000-7fb1eafbc000 r-xp 00000000 08:01 391749                     /lib/x86_64-linux-gnu/ld-2.18.so
    7fb1eb018000-7fb1eb1a1000 r--p 00000000 08:01 1052029                    /usr/lib/locale/locale-archive
    7fb1eb1a1000-7fb1eb1a4000 rw-p 00000000 00:00 0
    7fb1eb1b9000-7fb1eb1bb000 rw-p 00000000 00:00 0
    7fb1eb1bb000-7fb1eb1bc000 r--p 0001f000 08:01 391749                     /lib/x86_64-linux-gnu/ld-2.18.so
    7fb1eb1bc000-7fb1eb1bd000 rw-p 00020000 08:01 391749                     /lib/x86_64-linux-gnu/ld-2.18.so
    7fb1eb1bd000-7fb1eb1be000 rw-p 00000000 00:00 0
    7fff48a06000-7fff48a27000 rw-p 00000000 00:00 0                          [stack]
    7fff48a49000-7fff48a4b000 r-xp 00000000 00:00 0                          [vdso]
    ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
  • 相关阅读:
    堆排序实现
    Unable to convert MySQL date/time value to System.DateTime
    想想那些除了技术之外重要的事情
    js小功能
    01输入框回车触发操作
    javascript闭包
    BQ27510 电量计的校准 的 C语言实现
    嵌入式Linux开发教程:Linux常见命令(上篇)
    技术团队的情绪与效率
    如何有效使用Project(2)——进度计划的执行与监控
  • 原文地址:https://www.cnblogs.com/qsort/p/3695430.html
Copyright © 2011-2022 走看看