/******************************************************************************
Welcome to GDB Online.
GDB online is an online compiler and debugger tool for C, C++, Python, PHP, Ruby,
C#, VB, Perl, Swift, Prolog, Javascript, Pascal, HTML, CSS, JS
Code, Compile, Run and Debug online from anywhere in world.
*******************************************************************************/
#include <iostream>
using namespace std;
void function(char *p)
{
cout << "inside function: " << *p;
}
int main()
{
char *pointer, z;
for (int cnt = 0; cnt < 3; cnt++)//ESP + word
{
char w = 'X';//ESP + word o ile dobrze pamiętam wskaźnik stosu jest przestawiany o całe słowo nawet dla mniejszych typów danych
pointer = &w;
cout << "inside loop: " << *pointer << endl;
}
//ESP - 2 word
//tu wprawdzie nie ma dostępu do cnt i w poprzez nazwę, ale na stosie nadal istnieją, więc na upartego dałoby radę się do nich dobrać używając asemblera, albo po bożemu zadeklarowanym wcześniej wskaźnikiem
z = *pointer;
cout << "outside loop: " << z << endl;
int a = 12345678, b = 9987677, c = 1029384756;
function(pointer);//to powoduje odłożenie adresu powrotnego i parametrów na stos, ESP + word + z grubsza X*word za każdy parametr typu prostego. spowoduje to nadpisanie pamięci w której rezydował char w.
//ciekawe, w funkcji jednak też pokazuje 'X' - może to się robi wywołanie inline?
//zbadam to dokładniej wieczorem
}