Difference between revisions of "SPO600 Compiled C Lab"

From CDOT Wiki
Jump to: navigation, search
Line 1: Line 1:
 
[[Category:SPO600]]{{Chris Tyler Draft}}
 
[[Category:SPO600]]{{Chris Tyler Draft}}
  
{{Admon/note|Purpose of this Lab|In this lab, you will see the relationship between basic C source code and the output of the C compiler.}}
+
{{Admon/note|Purpose of this Lab|In this lab, you will investigate the relationship between basic C source code and the output of the C compiler.}}
{{Admon/tip|Ireland|If you do not have a Linux machine with you, you can use ireland.proximity.on.ca -- an account has
+
{{Admon/tip|Ireland|If you do not have a Linux machine with you, you can use ireland.proximity.on.ca -- an account has been created for each [[SPO600]] student. See your professor for login information.}}
 +
 
 
== Lab 2 ==
 
== Lab 2 ==
  
Line 18: Line 19:
 
  -O0              # do not optimize (that's a capital letter and then the digit zero)
 
  -O0              # do not optimize (that's a capital letter and then the digit zero)
 
  -fno-builtins    # do not use builtin function optimizations
 
  -fno-builtins    # do not use builtin function optimizations
 +
 +
3. The resulting binary is an ELF (Executable and Linkable Format) file, which contains multiple sections. These sections may contain [[Machine Language|object code]], link tables, [[Debugger|debugging]] [[Symbols|symbols]], program data (such as constants and the initial values of variables), metadata about the program and ELF sections, and comments.
 +
 +
Examine the binary produced by the previous step using the ''objdump'' program. These options may be useful -- see the manpage for ''objdump'' for other options:
 +
 +
-f          # display header information for the entire file
 +
-s          # display per-section summary information
 +
-d          # disassemble sections containing code
 +
--source    # (implies -d) show source code, if available, along with disassembly
 +
 +
 +
 +
== External Resources ==
 +
 +
* For a general overview of ELF, see the Wikipedia article on [http://en.wikipedia.org/wiki/Executable_and_Linkable_Format Executable and Linkable Format]).

Revision as of 01:49, 17 January 2014

Important.png
This is a draft only!
It is still under construction and content may change. Do not rely on this information.
Note.png
Purpose of this Lab
In this lab, you will investigate the relationship between basic C source code and the output of the C compiler.
Idea.png
Ireland
If you do not have a Linux machine with you, you can use ireland.proximity.on.ca -- an account has been created for each SPO600 student. See your professor for login information.

Lab 2

1. Write a basic C program which prints a message on the screen, Hello World!-style -- something like this:

#include <stdio.h>

int main() {
    printf("Hello World!\n");
}

2. Compile the program using the GCC compiler. Include these compiler options:

-g               # enable debugging information
-O0              # do not optimize (that's a capital letter and then the digit zero)
-fno-builtins    # do not use builtin function optimizations

3. The resulting binary is an ELF (Executable and Linkable Format) file, which contains multiple sections. These sections may contain object code, link tables, debugging symbols, program data (such as constants and the initial values of variables), metadata about the program and ELF sections, and comments.

Examine the binary produced by the previous step using the objdump program. These options may be useful -- see the manpage for objdump for other options:

-f          # display header information for the entire file
-s          # display per-section summary information
-d          # disassemble sections containing code
--source    # (implies -d) show source code, if available, along with disassembly


External Resources