=========================================================================
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
=========================================================================