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; }