Understanding execution of very minimal C program in Linux / Ubuntu – Part 2

As we seen in previous post “Understanding Very Minimal C Program and its execution in Ubuntu Linux” , we tried to understand the basic minimum C program. Here we will try to understand, when we tried to run this program with debugging tools strace & ltrace as below,

ltrace is a “A library call tracer”

 $ ltrace ./minimum-c-program_exe
__libc_start_main(0x80483db, 1, 0xbfadd174, 0x80483f0 +++ exited (status 0) +++
$ whatis strace
strace (1) - trace system calls and signals
$ strace ./minimum-c-program_exe
execve("./minimum-c-program_exe", ["./minimum-c-program_exe"], [/* 69 vars */]) = 0
brk(NULL) = 0x96ce000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb770c000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=170138, ...}) = 0
mmap2(NULL, 170138, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb76e2000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/i386-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320\207\1\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1786484, ...}) = 0
mmap2(NULL, 1792540, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb752c000
mmap2(0xb76dc000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1af000) = 0xb76dc000
mmap2(0xb76df000, 10780, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb76df000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7733000
set_thread_area({entry_number:-1, base_addr:0xb7733940, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 (entry_number:6)
mprotect(0xb76dc000, 8192, PROT_READ) = 0
mprotect(0x8049000, 4096, PROT_READ) = 0
mprotect(0xb7734000, 4096, PROT_READ) = 0
munmap(0xb76e2000, 170138) = 0
exit_group(0) = ?
+++ exited with 0 +++
READ  Difference between Thread and Process

Leave a Reply

Your email address will not be published. Required fields are marked *