26.07.2018 Views

hacking-the-art-of-exploitation

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

static.c<br />

#include <br />

void function() { // An example function, with its own context<br />

int var = 5;<br />

static int static_var = 5; // Static variable initialization<br />

}<br />

printf("\t[in function] var = %d\n", var);<br />

printf("\t[in function] static_var = %d\n", static_var);<br />

var++;<br />

// Add one to var.<br />

static_var++; // Add one to static_var.<br />

int main() { // The main function, with its own context<br />

int i;<br />

static int static_var = 1337; // Ano<strong>the</strong>r static, in a different context<br />

}<br />

for(i=0; i < 5; i++) { // Loop 5 times.<br />

printf("[in main] static_var = %d\n", static_var);<br />

function(); // Call <strong>the</strong> function.<br />

}<br />

The aptly named static_var is defined as a static variable in two places:<br />

within <strong>the</strong> context <strong>of</strong> main() and within <strong>the</strong> context <strong>of</strong> function(). Since static<br />

variables are local within a p<strong>art</strong>icular functional context, <strong>the</strong>se variables can<br />

have <strong>the</strong> same name, but <strong>the</strong>y actually represent two different locations in<br />

memory. The function simply prints <strong>the</strong> values <strong>of</strong> <strong>the</strong> two variables in its context<br />

and <strong>the</strong>n adds 1 to both <strong>of</strong> <strong>the</strong>m. Compiling and executing this code will<br />

show <strong>the</strong> difference between <strong>the</strong> static and nonstatic variables.<br />

reader@<strong>hacking</strong>:~/booksrc $ gcc static.c<br />

reader@<strong>hacking</strong>:~/booksrc $ ./a.out<br />

[in main] static_var = 1337<br />

[in function] var = 5<br />

[in function] static_var = 5<br />

[in main] static_var = 1337<br />

[in function] var = 5<br />

[in function] static_var = 6<br />

[in main] static_var = 1337<br />

[in function] var = 5<br />

[in function] static_var = 7<br />

[in main] static_var = 1337<br />

[in function] var = 5<br />

[in function] static_var = 8<br />

[in main] static_var = 1337<br />

[in function] var = 5<br />

[in function] static_var = 9<br />

reader@<strong>hacking</strong>:~/booksrc $<br />

Programming 67

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!