【初期化せずに値を入れようとした】
DWORD dwData[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
DWORD *pdwWork;
*pdwWork = dwData[0];
/* 配列の全要素を2倍にしたい */
for(i = 0; i < 10; i++){
*pdwWork = *pdwWork * 2;
pdwWork++;
}
print()
【初期化を並べて行うと、2つ目はポインタ変数にならない】
DWORD dwX, dwY;
DWORD* pdwX, pdwY;
dwX = 0x0X00;
dwY = 0x0C00;
pdwX = &dwX;
pdwY = &dwY;
/* 各変数に+1したい */
*pdwX = *pdwX + 1;
*pdwY = *pdwY + 1;
print()
【void型のままでは型がわからないので使えない】
DWORD dwData = 20;
void *pData;
pData = &dwData;
print(“%d\n”, *pData);
【変数の値を関数から取得する】
void get_xy(double x, double y)
{
print(x,y);
x = 2.0;
y = 4.0;
}
int main(void)
{
double x = 20.0;
double y = 40.0;
print(x,y);
get_xy(x, y);
print(x,y);
return 0;
}
【バッファオーバーラン】
void hello(void)
{
print(“hello\n”);
}
void func(void)
{
void *buf[10];
static int i;
for(i = 0; i < 100; i++){
buf[i] = hello;
}
}
int main(void)
{
int buf[1000];
buf[999] = 10;
func();
return 0;
}
期待値はどこからも読んでないhello()が実行されること
スタックのリターンアドレスがhelloで上書きされるから
コメントを残す