The compilation process
Download
1 / 6

The Compilation Process - PowerPoint PPT Presentation

The Compilation Process .o 1110… Precompiler Assembler Compiler Linker .c .s .o Straight substitution of # signs 1010… 0110… .o 08048fac <main>: 8048fac:55 push %ebp 8048fad:89 e5 mov %esp,%ebp

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha

Download Presentation

The Compilation Process

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


The Compilation Process

.o

1110…

Precompiler

Assembler

Compiler

Linker

.c

.s

.o

Straight substitution

of # signs

1010…

0110…

.o

08048fac <main>:

8048fac:55 push %ebp

8048fad:89 e5 mov %esp,%ebp

8048faf:83 ec 1c sub $0x1c,%esp

8048fb2:57 push %edi

8048fb3:56 push %esi

8048fb4:53 push %ebx

8048fb5:8b 75 08 mov 0x8(%ebp),%esi

8048fb8:8b 5d 0c mov 0xc(%ebp),%ebx

8048fbb:c7 45 f8 00 00 00 00 movl $0x0,0xfffffff8(%ebp)

8048fc2:c7 45 f4 01 00 00 00 movl $0x1,0xfffffff4(%ebp)

8048fc9:83 c4 f8 add $0xfffffff8,%esp

8048fcc:68 7c 8e 04 08 push $0x8048e7c

8048fd1:6a 0b push $0xb

8048fd3:e8 00 f7 ff ff call 80486d8 <_init+0x70>

8048fd8:83 c4 f8 add $0xfffffff8,%esp

8048fdb:68 4c 8e 04 08 push $0x8048e4c

1010…

1110…

0110…

Final Executable

Binary File


Making Code More Modular

Precompile info

#include <stdlib.h>

#include <stdio.h>

#define MAX_WORD_LEN 30

void print_menu (void);

int insert (char **array, int *numwords, char *buf);

int print_to_file (char **array, int numwords, char *file);

int

main (int argc, char *argv[])

{

...

}

void

print_menu (void)

{

...

}

int

insert (char **array, int *numwords, char *buf)

{

...

}

Create a header file for each

Prototypes

Main Function

Leave in main .c file

Place each in its own .c file

Additional

Functions


Making Code More Modular

labx.c

print.h

#include <stdlib.h>

#include <stdio.h>

#include “print.h”

#include “insert.h”

#define MAX_WORD_LEN 30

int

main (int argc, char *argv[])

{

...

}

void print_menu (void);

int print_to_file (char **array, int numwords, char *file);

insert.h

void

print_menu (void)

{

...

}

int print_to_file (char **array, int numwords, char *file);

{

...

}

int insert (char **array, int *numwords, char *buf);

print.c

insert.c

int

insert (char **array, int *numwords, char *buf)

{

...

}


Putting the Modules Together

labx.c

labx.o

print.c

print.o

LINKER

insert.o

insert.c

a.out


Confused??? Enter Makefiles

  • Located in the directory of your code

  • Must be named Makefile

  • Syntax:

    • Comments:#Put anything here

    • Macros:CC = gccCFLAGS = -Wall –O –pedantic –o LabX.exe

    • FILES = labx.c print.c insert.c

      ---------------------------------------------$(CC) $(CFLAGS) $(FILES)

      Translates to

      gcc –Wall –O2 –pedantic –o LabX.exe labx.c print.c insert.c


Syntax con’t.

  • Statements:

    {name}: {dependency1 dependency2 …}

    <tab> {command1}

    <tab> {command2}

    <tab> …

  • all: is the default statement (run when just ‘make’ is typed at the command line)

  • cleanup: cleans up when there is an error

  • make <name>

    will explicitly run the statement name


ad
  • Login