LU-LSP-b11:L08
Praktiskais darbs #8 - 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 MD4.
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;
}