Home » Programming Languages » C Programs » Understanding Very basic C Program and its execution in Ubuntu Linux – Part 1

Understanding Very basic C Program and its execution in Ubuntu Linux – Part 1

Following is the very minimum syntax required for the “C” program, we can call it as the first C program which we can write.

 $ vim minimum-c-program.c 
main() {
}

That is, the most minimum syntax required for a simple C program should contain 3 important things as,

  • main function which is the entry point of the C program
  • open and close bracket () after main
  • open and close curly brace {}

Now, Lets try to compile this program using GCC compiler in Linux as,

$ gcc -o minimum-c-program_exe minimum-c-program.c 

Execute the binary executable created using above command as,

$ ./minimum-c-program_exe 

Now, we can check code and data size of this program using “size” utility ( size command ) as,

$ size minimum-c-program_exe
   text	   data	    bss	    dec	    hex	filename
   1017	    272	      4	   1293	    50d	minimum-c-program

We can check the symbols in the binary created by compiler using “nm” command as,

$ nm -S minimum-c-program
0804a018 B __bss_start
0804a018 00000001 b completed.7200
0804a010 D __data_start
0804a010 W data_start
08048320 t deregister_tm_clones
08048390 t __do_global_dtors_aux
08049f0c t __do_global_dtors_aux_fini_array_entry
0804a014 D __dso_handle
08049f14 d _DYNAMIC
0804a018 D _edata
0804a01c B _end
08048454 T _fini
08048468 00000004 R _fp_hw
080483b0 t frame_dummy
08049f08 t __frame_dummy_init_array_entry
08048558 r __FRAME_END__
0804a000 d _GLOBAL_OFFSET_TABLE_
         w __gmon_start__
08048470 r __GNU_EH_FRAME_HDR
0804828c T _init
08049f0c t __init_array_end
08049f08 t __init_array_start
0804846c 00000004 R _IO_stdin_used
         w _ITM_deregisterTMCloneTable
         w _ITM_registerTMCloneTable
08049f10 d __JCR_END__
08049f10 d __JCR_LIST__
         w _Jv_RegisterClasses
08048450 00000002 T __libc_csu_fini
080483f0 0000005d T __libc_csu_init
         U __libc_start_main@@GLIBC_2.0
080483db 0000000a T main
08048350 t register_tm_clones
080482e0 T _start
0804a018 D __TMC_END__
08048310 00000004 T __x86.get_pc_thunk.bx

You can check which libraries this program uses using “following”ldd” command,

$ ldd minimum-c-program_exe
	linux-gate.so.1 =>  (0xb7722000)
	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb753d000)
	/lib/ld-linux.so.2 (0x80038000)

The other important commands (object dump – objdump) you can try to understand are as bellow,

 $ objdump -Dxls minimum-c-program_exe 
 $ readelf -a minimum-c-program_exe 

In the next post, we will try to understand how this program executes in run time as “Understanding execution of very minimal C program in Linux / Ubuntu

2 thoughts on “Understanding Very basic C Program and its execution in Ubuntu Linux – Part 1”

Leave a Comment