3. About This Slides
● All example was build by
– GCC4.1.3
– GLIB1.2.10
– GMAKE3.81
elpam.tw@gmail.com
4. C Language Review
● Stack
– Caller Function's Address
– CPU's Register
– Local Value
● Heap (runtime heap)
– managed by malloc
elpam.tw@gmail.com
5. Address Space
● Linux Memory Model
– copy from Jserv's STACK
Hacking Hello World
HEAP
elpam.tw@gmail.com
6. Function Stack Caller's Address
Return Address
void Func_B() Local Value
{
int a,b;
/* do nothing*/
} Low
void Func_A() int b
{ Func_B's Stack int a
char a; Func_A
Func_B();
}
char a
Func_A's Stack
main
int main()
{
Func_A();
} main's stack ....
elpam.tw@gmail.com High
9. Structure (I)
/* 11.c */
● Address + Offset struct A{
int a;
int b;
– pa = 0x804a008 };
– pa > a == pa + 0 int main()
{
– pa > b == pa + 4 struct A* pa =malloc(sizeof(struct A));
printf("%x,%x,%xn"
,pa, &(pa>a), &(pa>b) );
free( pa );
#> ./11 }
804a008,804a008,804a00c
#>
elpam.tw@gmail.com
11. Structure (II)
/* 12.c */
struct A{ Size = 8 byte
● pa == pb int a; int b;
};
– pa > c Compile Error struct B{
int a; int b;
– pb > c Correct int c; Size = 12 byte
};
int main()
{
struct A* pa =malloc(sizeof(B));
struct B* pb = pa;
pa > a = 1; pa > b = 2;
#> ./12 pb > c = 3;
1,2,3
#> printf("pb(%d,%d,%d)n"
,pb>a,pb>b,pb>c );
}
elpam.tw@gmail.com
16. C++ Review
/* 16.cpp */
class A{
● Casting to Parent public:
int a;
};
class B : public A{
public:
int b;
};
int main()
{
B b;
b . b = 2;
A(b) . a = 1
}
elpam.tw@gmail.com
17. Inherit
int main()
{
● sizeof(A) = 8 struct B* pb = malloc(sizeof(struct B));
pb > parent . a = 0;
● sizeof(B) = 12 pb > parent . b = 1;
pb > c = 2
/* 14.h */ }
struct A{
int a;
int b; /* 14.c */
Inherit A }; int main()
struct B{ {
struct A parent; struct A* pa =malloc(sizeof(struct B));
int c; struct B* pb = pa;
}; pa > a = 0;
pa > b = 1;
#>./14 pb > c = 2;
pa(1,2) pb(3) }
#>
elpam.tw@gmail.com
18. Inherit & Casting
/* 15.c */
● Casting to Parent int main()
{
struct B* pb =malloc(sizeof(struct B));
pb > c = 3;
struct A* pa = pb;
/* 15.h */ pa > a = 1;
struct A{ pa > a = 2;
int a;
int b; printf("pa(%d,%d) pb(%d)n"
}; ,pa>a,pa>b,pb>c );
struct B{ }
struct A parent;
int c;
};
#>./15
pa(1,2) pb(3)
#>
elpam.tw@gmail.com
19. Public Member Value in C++
int main()
{
class A{
B* b = new B;
public:
int a;
b . a = 0;
int b;
b . b = 1;
};
b . c = 2;
class B : public A {
}
public:
int c;
};
int main()
{
A* a = new b;
a . a = 0;
a . b = 1;
a . c = 2; /* error */
B(a) . c = 2; /* correct */
}
elpam.tw@gmail.com
20. Object Inherit
● C Language ● C++
struct A{ class A{
int a; public:
int b; int a;
}; int b;
struct B{ };
struct A parent; class B : public A {
int c; public:
}; int c;
};
elpam.tw@gmail.com
21. Type Casting ( 形態轉換 )
● C Language ● C++
– StructuretoStructure – dynamic_cast
● AddresstoAddress – static_cast
– reinterpret_cast
– const_cast
elpam.tw@gmail.com
22. Inherit in C
● C > B > A
/* error memory access */
int main()
struct A{ {
int v1; struct B* pb = malloc(sizeof(B));
int v2; struct C* pc = pb; /* correct */
}; pc > v1 = 0; /* run time error */
struct B{
struct A parent; }
int v1;
};
struct C{
struct B parent; struct C c;
int v1; struct B* pb = &c; /* use B's member */
}; struct A* pb = &c; /* use A's member */
elpam.tw@gmail.com