• Tidak ada hasil yang ditemukan

Information Security - 2 - Nptel

N/A
N/A
Protected

Academic year: 2024

Membagikan "Information Security - 2 - Nptel"

Copied!
9
0
0

Teks penuh

(1)

Information Security - 2

Topic: Architectural Aid to Secure Systems Engineering V. Kamakot

RISE LAB, Department of Computer Science and Engineering IIT Madras

SESSION – 3: FUNCTION CALLS AND STACKS

(2)

Topic

• A sample of well-studied security issues

• Buffer Overflow

– What is this?

– Which system component causes it?

– What happens due to the same?

(3)

Function Calls

Very important for Software Development

Calling function and called function

Call by Reference

scanf(“%d”, &my_var)

Call by Value

printf(“%d”,my_var) Function returns results

Context of Calling function to be retained for continuation after called function returns.

Use of Stack

First-in Last-Out

suits function execution model

(4)

main()

{ int am,bm,cm;

//am = 2, bm = cm = 1 bm = my_proc(am,bm);

//am=2, bm=21, cm=1 L1: ….. }

int my_proc(int em,int fm) { int am,bm,cm;

//em=2, fm=1, am=3, cm=6 bm = next_sk1(am,cm);

//em=2,fm=1,am=3,bm=18,cm=6 L2: cm = bm + am;

return(cm); //cm = 21; } int next_sk1(int gm, int hm) {int am; //gm=3,hm=6

am = gm* hm;

return(am); //am = 18;}

Initial State

Operating Systems Stack Smashing!!!

(5)

main()

{ int am,bm,cm;

//am = 2, bm = cm = 1 bm = my_proc(am,bm);

//am=2, bm=21, cm=1 L1: ….. }

int my_proc(int em,int fm) { int am,bm,cm;

//em=2, fm=1, am=3, cm=6 bm = next_sk1(am,cm);

//em=2,fm=1,am=3,bm=18,cm=6 L2: cm = bm + am;

return(cm); //cm = 21; } int next_sk1(int gm, int hm) {int am; //gm=3,hm=6

am = gm* hm;

return(am); //am = 18;}

1 2 L1

1 1 2

my_proc() is called by main()

am of main()

Ret. Addr

Arg1 for my_proc() Arg2 for my_proc()

bm of main() cm of main() FP

SP

(6)

main()

{ int am,bm,cm;

//am = 2, bm = cm = 1 bm = my_proc(am,bm);

//am=2, bm=21, cm=1 L1: ….. }

int my_proc(int em,int fm) { int am,bm,cm;

//em=2, fm=1, am=3, cm=6 bm = next_sk1(am,cm);

//em=2,fm=1,am=3,bm=18,cm=6 L2: cm = bm + am;

return(cm); //cm = 21; } int next_sk1(int gm, int hm) {int am; //gm=3,hm=6

am = gm* hm;

return(am); //am = 18;}

3 1 2 L1

1 1 2

6 3 L2

6 J

next_sk1() is called by my_proc() am of main()

Ret. Addr

em of my_proc() fm of my_proc()

bm of main() cm of main()

bm of my_proc() cm of my_proc() am of my_proc()

arg1 for next_sk1() arg2 for next_sk1()

Ret. Addr

(7)

main()

{ int am,bm,cm;

//am = 2, bm = cm = 1 bm = my_proc(am,bm);

//am=2, bm=21, cm=1 L1: ….. }

int my_proc(int em,int fm) { int am,bm,cm;

//em=2, fm=1, am=3, cm=6 bm = next_sk1(am,cm);

//em=2,fm=1,am=3,bm=18,cm=6 L2: cm = bm + am;

return(cm); //cm = 21; } int next_sk1(int gm, int hm) {int am; //gm=3,hm=6

am = gm* hm;

return(am); //am = 18;}

3 1 2 L1

1 1 2

6 18 L2 6 18

next_sk1() Finishes - Pop out

am of main()

Ret. Addr

em of my_proc() fm of my_proc()

bm of main() cm of main()

bm of my_proc() cm of my_proc() am of my_proc()

Ret val next_sk1()

Ret. Addr SP

FP

(8)

main()

{ int am,bm,cm;

//am = 2, bm = cm = 1 bm = my_proc(am,bm);

//am=2, bm=21, cm=1 L1: ….. }

int my_proc(int em,int fm) { int am,bm,cm;

//em=2, fm=1, am=3, cm=6 bm = next_sk1(am,cm);

//em=2,fm=1,am=3,bm=18,cm=6 L2: cm = bm + am;

return(cm); //cm = 21; } int next_sk1(int gm, int hm) {int am; //gm=3,hm=6

am = gm* hm;

return(am); //am = 18;}

3 1 21

L1 1 21

2

6 18 L2 6 18

my_proc() finishes

am of main()

Ret. Addr

Ret val my_proc() fm of my_proc()

bm of main() cm of main()

bm of my_proc() cm of my_proc() am of my_proc()

Ret val next_sk1()

Ret. Addr FP

SP

(9)

End of Session-3

Thank You

Referensi

Dokumen terkait