LU-LSP-b12:L09
Praktiskais darbs #9 - steka satura analīze un piekļuve stekam.
- Funkciju izsaukumu analīze. printf() lietošana steka satura izdrukai.
 
- objdump programma un tās lietošana koda analīzei.
 
- Funkciju "calling conventions". Atšķirības starp cdecl, stdcall, un citām.
 
- Piekļuve steka saturam caur inline asamblera kodu.
 
#define GET_EBP_VALUE(result) \
    asm volatile("movl %%ebp, %0\n" : "=m" (result))
- Optimizācija un tās ietekme uz steka izskatu.
 
Iesūtīšana
Šoreiz nekas nav jānodod. PD notiek interaktīvi. Drīkst arī strādāt pie MD.
Atceraties, ka mājasdarbos asamblera kodu lietot nav paredzēts!
Parauga kods
#include <stdio.h>
#include <stdlib.h>
void **stackBottom;
void print(int *ip, char *c)
{
    void **head = &head;
    int i;
    while (head <= stackBottom) {
//    for (i = 0; i < 10; i++) {
	printf("%p: %p\n", head, *head);
	head++;
    }
}
void g(int *ip, char *c)
{
    int local = 0xcafe;
    print(ip, c);
}
void f(int *ip, char *c)
{
    int local = 0xdeadbeef;
    g(ip, c);
}
int main(void)
{
    int dummy;
    stackBottom = &dummy;
    int *i = 0x11111111;
    char *c = 0x22222222;
    f(i, c);
    return 0;
}