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