32bit / 64bit co-exist Linux, ld-linux.so, l

系统 2079 0

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]
    

 

32bit / 64bit co-exist Linux, ld-linux.so, linux-gate.so.1 etc


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论