dyld binding test

=========================================================================

a.c

----------------------------------

void main (int argc, char **argv) {

    printf ("Salve, Munde!\n");

    printf ("Vale!\n");

    exit(0);

}

=========================================================================

dyldinfo -lazy_bind a

----------------------------------

lazy binding information (from lazy_bind part of dyld info):

segment section          address    index  dylib            symbol

__DATA  __la_symbol_ptr  0x100001010 0x0000 libSystem        _exit

__DATA  __la_symbol_ptr  0x100001018 0x000C libSystem        _printf

=========================================================================

otool -p _main -tV

----------------------------------

a:

(__TEXT,__text) section

_main:

0000000100000f10    pushq    %rbp

0000000100000f11    movq    %rsp, %rbp

0000000100000f14    subq    $0x20, %rsp

0000000100000f18    leaq    0x61(%rip), %rax ## literal pool for: "Salve, Munde!

"

0000000100000f1f    movl    %edi, -0x4(%rbp)

0000000100000f22    movq    %rsi, -0x10(%rbp)

0000000100000f26    movq    %rax, %rdi

0000000100000f29    movb    $0x0, %al

0000000100000f2b    callq    0x100000f54 ## symbol stub for: _printf    <------

0000000100000f30    leaq    0x58(%rip), %rdi ## literal pool for: "Vale!

"

0000000100000f37    movl    %eax, -0x14(%rbp)

0000000100000f3a    movb    $0x0, %al

0000000100000f3c    callq    0x100000f54 ## symbol stub for: _printf    <------

0000000100000f41    movl    $0x0, %edi

0000000100000f46    movl    %eax, -0x18(%rbp)

0000000100000f49    callq    0x100000f4e ## symbol stub for: _exit    <------

=========================================================================

otool -l -V a

----------------------------------

a:

Load command 0

      cmd LC_SEGMENT_64

  cmdsize 72

  segname __PAGEZERO

   vmaddr 0x0000000000000000

   vmsize 0x0000000100000000

  fileoff 0

 filesize 0

  maxprot ---

 initprot ---

   nsects 0

    flags (none)

Load command 1

      cmd LC_SEGMENT_64

  cmdsize 552

  segname __TEXT

   vmaddr 0x0000000100000000

   vmsize 0x0000000000001000

  fileoff 0

 filesize 4096

  maxprot rwx

 initprot r-x

   nsects 6

    flags (none)

Section

  sectname __text

   segname __TEXT

      addr 0x0000000100000f10

      size 0x000000000000003e

    offset 3856

     align 2^4 (16)

    reloff 0

    nreloc 0

      type S_REGULAR

attributes PURE_INSTRUCTIONS SOME_INSTRUCTIONS

 reserved1 0

 reserved2 0

Section

  sectname __stubs

   segname __TEXT

      addr 0x0000000100000f4e <------

      size 0x000000000000000c

    offset 3918

     align 2^1 (2)

    reloff 0

    nreloc 0

      type S_SYMBOL_STUBS

attributes PURE_INSTRUCTIONS SOME_INSTRUCTIONS

 reserved1 0 (index into indirect symbol table)

 reserved2 6 (size of stubs)

Section

  sectname __stub_helper

   segname __TEXT

      addr 0x0000000100000f5c

      size 0x0000000000000024

    offset 3932

     align 2^2 (4)

    reloff 0

    nreloc 0

      type S_REGULAR

attributes PURE_INSTRUCTIONS SOME_INSTRUCTIONS

 reserved1 0

 reserved2 0

Section

  sectname __cstring

   segname __TEXT

      addr 0x0000000100000f80

      size 0x0000000000000016

    offset 3968

     align 2^0 (1)

    reloff 0

    nreloc 0

      type S_CSTRING_LITERALS

attributes (none)

 reserved1 0

 reserved2 0

Section

  sectname __unwind_info

   segname __TEXT

      addr 0x0000000100000f96

      size 0x0000000000000048

    offset 3990

     align 2^0 (1)

    reloff 0

    nreloc 0

      type S_REGULAR

attributes (none)

 reserved1 0

 reserved2 0

Section

  sectname __eh_frame

   segname __TEXT

      addr 0x0000000100000fe0

      size 0x0000000000000018

    offset 4064

     align 2^3 (8)

    reloff 0

    nreloc 0

      type S_REGULAR

attributes (none)

 reserved1 0

 reserved2 0

Load command 2

      cmd LC_SEGMENT_64

  cmdsize 232

  segname __DATA

   vmaddr 0x0000000100001000

   vmsize 0x0000000000001000

  fileoff 4096

 filesize 4096

  maxprot rwx

 initprot rw-

   nsects 2

    flags (none)

Section

  sectname __nl_symbol_ptr

   segname __DATA

      addr 0x0000000100001000

      size 0x0000000000000010

    offset 4096

     align 2^3 (8)

    reloff 0

    nreloc 0

      type S_NON_LAZY_SYMBOL_POINTERS

attributes (none)

 reserved1 2 (index into indirect symbol table)

 reserved2 0

Section

  sectname __la_symbol_ptr

   segname __DATA

      addr 0x0000000100001010

      size 0x0000000000000010

    offset 4112

     align 2^3 (8)

    reloff 0

    nreloc 0

      type S_LAZY_SYMBOL_POINTERS

attributes (none)

 reserved1 4 (index into indirect symbol table)

 reserved2 0

Load command 3

      cmd LC_SEGMENT_64

  cmdsize 72

  segname __LINKEDIT

   vmaddr 0x0000000100002000

   vmsize 0x0000000000001000

  fileoff 8192

 filesize 352

  maxprot rwx

 initprot r--

   nsects 0

    flags (none)

Load command 4

            cmd LC_DYLD_INFO_ONLY

        cmdsize 48

     rebase_off 8192

    rebase_size 8

       bind_off 8200

      bind_size 24

  weak_bind_off 0

 weak_bind_size 0

  lazy_bind_off 8224

 lazy_bind_size 32

     export_off 8256

    export_size 48

Load command 5

     cmd LC_SYMTAB

 cmdsize 24

  symoff 8376

   nsyms 5

  stroff 8480

 strsize 64

Load command 6

            cmd LC_DYSYMTAB

        cmdsize 80

      ilocalsym 0

      nlocalsym 0

     iextdefsym 0

     nextdefsym 2

      iundefsym 2

      nundefsym 3

         tocoff 0

           ntoc 0

      modtaboff 0

        nmodtab 0

   extrefsymoff 0

    nextrefsyms 0

 indirectsymoff 8456

  nindirectsyms 6

      extreloff 0

        nextrel 0

      locreloff 0

        nlocrel 0

Load command 7

          cmd LC_LOAD_DYLINKER

      cmdsize 32

         name /usr/lib/dyld (offset 12)

Load command 8

     cmd LC_UUID

 cmdsize 24

    uuid AAF0A21D-08BD-30FB-BB08-2A3352D9D4B9

Load command 9

      cmd LC_VERSION_MIN_MACOSX

  cmdsize 16

  version 10.9

      sdk 10.9

Load command 10

      cmd LC_SOURCE_VERSION

  cmdsize 16

  version 0.0

Load command 11

       cmd LC_MAIN

   cmdsize 24

  entryoff 3856

 stacksize 0

Load command 12

          cmd LC_LOAD_DYLIB

      cmdsize 56

         name /usr/lib/libSystem.B.dylib (offset 24)

   time stamp 2 Thu Jan  1 08:30:02 1970

      current version 1197.1.1

compatibility version 1.0.0

Load command 13

      cmd LC_FUNCTION_STARTS

  cmdsize 16

  dataoff 8304

 datasize 8

Load command 14

      cmd LC_DATA_IN_CODE

  cmdsize 16

  dataoff 8312

 datasize 0

Load command 15

      cmd LC_DYLIB_CODE_SIGN_DRS

  cmdsize 16

  dataoff 8312

 datasize 64

=========================================================================

nm a | grep "U "

----------------------------------

U _exit

U _printf

U dyld_stub_binder

=========================================================================

nm a | wc -l

----------------------------------

5

=========================================================================

x/2i 0x100000f4e

----------------------------------

0x100000f4e <dyld_stub_exit>:    jmpq   *0xbc(%rip)        # 0x100001010 <------

0x100000f54 <dyld_stub_printf>:    jmpq   *0xbe(%rip)        # 0x100001018 <------

=========================================================================

x/g 0x100001010

----------------------------------

0x100001010:    0x0000000100000f6c <------

=========================================================================

x/g 0x100001018

----------------------------------

0x100001018:    0x0000000100000f76 <------

=========================================================================

x/2i 0x0000000100000f6c <------

----------------------------------

0x100000f6c:    pushq  $0x0

0x100000f71:    jmpq   0x100000f5c <------

=========================================================================

x/2i 0x0000000100000f76 <------

----------------------------------

0x100000f76:    pushq  $0xc

0x100000f7b:    jmpq   0x100000f5c <------

=========================================================================

x/3i 0x100000f5c

----------------------------------

0x100000f5c:    lea    0xa5(%rip),%r11        # 0x100001008

0x100000f63:    push   %r11

0x100000f65:    jmpq   *0x95(%rip)              # 0x100001000 <------

=========================================================================

x/2g 0x100001000

----------------------------------

0x100001000:    0x0000000000000000    0x0000000000000000

=========================================================================

b main

----------------------------------

r

----------------------------------

x/2g 0x100001000

----------------------------------

0x100001000:    0x00007fff8a2bc210 <------    0x0000000000000000

=========================================================================

disass 0x00007fff8a2bc210

----------------------------------

Dump of assembler code for function dyld_stub_binder:

0x00007fff8a2bc210 <dyld_stub_binder+0>:    push   %rbp

0x00007fff8a2bc211 <dyld_stub_binder+1>:    mov    %rsp,%rbp

0x00007fff8a2bc214 <dyld_stub_binder+4>:    sub    $0x140,%rsp

0x00007fff8a2bc21b <dyld_stub_binder+11>:    mov    %rdi,(%rsp)

0x00007fff8a2bc21f <dyld_stub_binder+15>:    mov    %rsi,0x8(%rsp)

0x00007fff8a2bc224 <dyld_stub_binder+20>:    mov    %rdx,0x10(%rsp)

0x00007fff8a2bc229 <dyld_stub_binder+25>:    mov    %rcx,0x18(%rsp)

0x00007fff8a2bc22e <dyld_stub_binder+30>:    mov    %r8,0x20(%rsp)

0x00007fff8a2bc233 <dyld_stub_binder+35>:    mov    %r9,0x28(%rsp)

0x00007fff8a2bc238 <dyld_stub_binder+40>:    mov    %rax,0x30(%rsp)

End of assembler dump.

=========================================================================

x/i dyld_stub_exit

----------------------------------

0x100000f4e <dyld_stub_exit>:    jmpq   *0xbc(%rip)        # 0x100001010

=========================================================================

x/i dyld_stub_printf

----------------------------------

0x100000f54 <dyld_stub_printf>:    jmpq   *0xbe(%rip)        # 0x100001018

=========================================================================

x/g 0x100001018

----------------------------------

0x100001018:    0x0000000100000f76

=========================================================================

x/2i 0x0000000100000f76

----------------------------------

0x100000f76:    pushq  $0xc

0x100000f7b:    jmpq   0x100000f5c

=========================================================================

b *0x0000000100000f2b

b *0x0000000100000f3c

=========================================================================

x/g 0x100001018

----------------------------------

0x100001018:    0x0000000100000f76

=========================================================================

x/2i 0x0000000100000f76

----------------------------------

0x100000f76:    pushq  $0xc

0x100000f7b:    jmpq   0x100000f5c

=========================================================================

x/g 0x100001018

----------------------------------

0x100001018:    0x00007fff883ba8a8

=========================================================================

x/2i 0x00007fff883ba8a8

----------------------------------

0x7fff883ba8a8 <printf>:    push   %rbp

0x7fff883ba8a9 <printf+1>:    mov    %rsp,%rbp

=========================================================================

 

你可能感兴趣的:(test)