Slide 1

Slide 1 text

Linux   (@vicowara)

Slide 2

Slide 2 text

n oa.k.a. vicowara nHP: http://vicowara.github.io/ n: http://sugawarayusuke.hatenablog.com/ nSNS     2

Slide 3

Slide 3 text

n06'32# " o06+* ≒ 06'32 n(17.3$7  n,/5&4-& netc. n! o OS   o! o1)%4 06+*  3

Slide 4

Slide 4 text

n,#(%/6&30 ! 124  $7(+7("/6)( o   n*8('8-"'7.$5/6&30 n/6&30" /6)( o (+7(  /6)( 4

Slide 5

Slide 5 text

   $ ./a.out    Hello, world!    5

Slide 6

Slide 6 text

&)#"   bash  %(     $!'"  6

Slide 7

Slide 7 text

n3DA o1D3DA%) 2D:A , API* &+( ()

Slide 8

Slide 8 text

!execve n Linux 0'(7 ()ELF n ELF2.-18*632.- ,)+592.-3#$ e_entry49/ .interp,)+59  " &%$ 8  ELF

Slide 9

Slide 9 text

 9  

Slide 10

Slide 10 text

n "(2I7BIJ4CL=< , FGJ,LN@"(32#!0' oprintf*scanf* ($3/libc) oLN@  A67K-8M?JND7M?, u - "-)'(2/ n "(2I7BIJ-  oldd:EM@ o -).3-I7BIJ, LN>&(+5%0 vicco@localhost ~/Scripts/hello $ ldd hello linux-vdso.so.1 (0x00007ffdea521000) libc.so.6 => /lib64/libc.so.6 (0x00007f8fd35df000) /lib64/ld-linux-x86-64.so.2 (0x00007f8fd398e000) 10  I7BIJ. .dynamic.dynstr=9;HM 1

Slide 11

Slide 11 text

n$* ('  nELF%"!e_entry n_start +#),&+# o/usr/lib64/crt1.o  ()+) o_start() → __libc_start_main() → main()   +#),&+# 11 vicco@localhost ~/Scripts/hello $ readelf -h hello|grep Entry Entry point address: 0x4003e0 vicco@localhost ~/Scripts/hello $ objdump -d hello|grep 4003e0 00000000004003e0 <_start>: 4003e0: 31 ed xor %ebp,%ebp

Slide 12

Slide 12 text

'1  12 0 ('1 )  13! '1.* Linux 3%0 execve  +,/     13! .&./ +,/)"' 2#/3(2# -33.2$ 3%0 '1.* 

Slide 13

Slide 13 text

 13   

Slide 14

Slide 14 text

n 0xAX: How the Linux kernel runs a program · Linux Inside, available from (accessed 2018-03-03) n M. Jones: Linux E4BEFK/ $, available from (accessed 2018-03-03) n Yabusame: >E4@K,/ !%# CH98 /8:<7, available from (accessed 2018-03-03) n *) o JohnR. L.: Linkers & Loaders, Morgan Kaufmann (1999).  ("): Linker L Loaders, 5KD (2001) o  :FI6JHK; &'=7?<7― A34G2+1-0.(/ , CQ (2010)  14