본문 바로가기

Programming

system, execl, exeve PATH 차이

system 의 경우 결국

execve("/bin/sh", "-c", "blabla...");

이거고


execl 의 경우


execve("blabla", "arg1", ...);

이거인데.



원래 execve 자체는 PWD 상에 실행할 프로그램을 검색하지만

/bin/sh -c 로 주어지는 프로그램은

정확한 PATH 변수에 있는경우만 뒤져서 실행됨.


이것때문에 차이가남...




예를들어 execlp 같은경우 PATH 환경변수 의 디렉토리들을 뒤지면서 "nit" 명령을 아래처럼 찾음...


Breakpoint 3, 0x556434c0 in execve () from /lib/i386-linux-gnu/libc.so.6

(gdb) b *0x556434e8

Breakpoint 4 at 0x556434e8

(gdb) c

Continuing.


Breakpoint 4, 0x556434e8 in execve () from /lib/i386-linux-gnu/libc.so.6

(gdb) x/s $ebx

0xffe52e29: "/usr/local/bin/nit"

(gdb) c

Continuing.


Breakpoint 3, 0x556434c0 in execve () from /lib/i386-linux-gnu/libc.so.6

(gdb) c

Continuing.


Breakpoint 4, 0x556434e8 in execve () from /lib/i386-linux-gnu/libc.so.6

(gdb) x/s $ebx

0xffe52e2e: "/usr/sbin/nit"

(gdb) 




하지만 execl 은 그냥 절대경로면 실행하고 아니면 PWD 에서 프로그램을 찾아보고 땡... 이런식으로 exec 계열들마다 상대경로 처리방식에 차이가남.




'Programming' 카테고리의 다른 글

BPF vs eBPF  (0) 2018.05.18
OSX routing table setup  (0) 2016.08.06
ARM DACR basics  (0) 2016.07.13
Intel SGX basics  (1) 2016.07.12
Mount QEMU qcow image  (0) 2015.12.17