Class Problems: 1. Make the function and show the memory

Class Problems:
1. Make the function and show the memory stack after the function call assuming the next instruction
after the function call is 0x0845262A, esp is 0xbffff810 and ebp is 0xbffff818
#include <stdio.h>
int main()
{
int number;
printf(“Enter a number: “);
scanf(“%d”, &number);
number=doubler(number);
}
printf(“Your number doubled is: %d”, number);
Solution:
#include <stdio.h>
int doubler(int a)
{
int double=2*a;
return double;
}
int main()
{
int number;
printf(“Enter a number: “);
scanf(“%d”, &number);
number=doubler(number);
}
printf(“Your number doubled is: %d”, number);
Address
0xbfff802
0xbfff803
0xbfff804
0xbfff805
0xbfff806
0xbfff807
0xbfff808
0xbfff809
0xbfff80a
0xbfff80b
0xbfff80c
0xbfff80d
0xbfff80e
0xbfff80f
0xbfff810
0xbfff811
0xbfff812
0xbfff813
0xbfff814
0xbfff815
0xbfff816
0xbfff817
0xbfff818
Data
double
esp (doubler)
prior ebp value/
18
ebp (doubler)
f8
ff
bf
eip return value
2A
26
45
08
Argument esp (main)
for a
number
ebp (main)
2. Make the function and show the memory stack after the function call assuming the next instruction
after the function call is 0x08454F4E, esp is 0xbffff814 and ebp is 0xbffff818
#include <stdio.h>
int main()
{
int char1, char2;
printf(“Enter your initials: “);
scanf(“%c %c, &char1, &char2);
}
if(same(char1, char2)==1)
{
printf(“Your initials are the same!”);
}
else
{
printf(“Your initials are not the same!”);
}
Solution:
#include <stdio.h>
int same(char c1, char c2)
{
int result;
if(c1==c2)
result=1;
else
result=0;
return result;
}
int main()
{
char char1, char2;
printf(“Enter your initials: “);
scanf(“%c %c, &char1, &char2);
}
if(same(char1, char2)==1)
{
printf(“Your initials are the same!”);
}
else
{
printf(“Your initials are not the same!”);
}
Address
0xbfff802
0xbfff803
0xbfff804
0xbfff805
0xbfff806
0xbfff807
0xbfff808
0xbfff809
0xbfff80a
0xbfff80b
0xbfff80c
0xbfff80d
0xbfff80e
0xbfff80f
0xbfff810
0xbfff811
0xbfff812
0xbfff813
0xbfff814
0xbfff815
0xbfff816
0xbfff817
0xbfff818
Data
result
esp (same)
18
f8
ff
bf
4E
4F
45
08
Arg for c1
Arg for c2
char2
prior ebp value/
ebp (same)
eip return value
esp (main)
char1
ebp (main)
3. Make the function and show the memory stack after the function call assuming the next instruction
after the function call is 0x08ff4435, esp is 0xbffff810 and ebp is 0xbffff818
#include <stdio.h>
int main()
{
int number;
printf(“Enter a number: “);
scanf(“%d”, &number);
number=negative(number);
}
printf(“The negative of your number is: %d”, number);
Solution:
#include <stdio.h>
int negative(int x)
{
int neg_val=-x;
return neg_val;
}
int main()
{
int number;
printf(“Enter a number: “);
scanf(“%d”, &number);
number=negative(number);
printf(“The negative of your number is: %d”,
number);
}
Address
0xbfff802
0xbfff803
0xbfff804
0xbfff805
0xbfff806
0xbfff807
0xbfff808
0xbfff809
0xbfff80a
0xbfff80b
0xbfff80c
0xbfff80d
0xbfff80e
0xbfff80f
0xbfff810
0xbfff811
0xbfff812
0xbfff813
0xbfff814
0xbfff815
0xbfff816
0xbfff817
0xbfff818
Data
neg_val
esp (negative)
prior ebp value/
18
ebp (negative)
f8
ff
bf
eip return value
35
44
ff
08
Argument esp (main)
for x
number
ebp (main)
4. Make the function and show the memory stack after the function call assuming the next instruction
after the function call is 0x08452532, esp is 0xbffff808 and ebp is 0xbffff818
#include <stdio.h>
int main()
{
int number1, number2;
printf(“Enter two numbers: “);
scanf(“%d %d”, &number1, &number2);
}
if(same(number1, number2)==1)
{
printf(“Your numbers are the same!”);
}
else
{
printf(“Your numbers are not the same!”);
}
Solution:
#include <stdio.h>
int same (int a, int b)
{
int result;
if(a==b)
result=1;
else
result=0;
return result;
}
int main()
{
int number1, number2;
printf(“Enter two numbers: “);
scanf(“%d %d”, &number1, &number2);
}
if(same(number1, number2)==1)
{
printf(“Your numbers are the same!”);
}
else
{
printf(“Your numbers are not the same!”);
}
Address
0xbfff7fc
0xbfff7fd
0xbfff7fe
0xbfff7ff
0xbfff800
0xbfff801
0xbfff802
0xbfff803
0xbfff804
0xbfff805
0xbfff806
0xbfff807
0xbfff808
0xbfff809
0xbfff80a
0xbfff80b
0xbfff80c
0xbfff80d
0xbfff80e
0xbfff80f
0xbfff810
0xbfff811
0xbfff812
0xbfff813
0xbfff814
0xbfff815
0xbfff816
0xbfff817
0xbfff818
Data
result
esp (same)
prior ebp value/
18
ebp (same)
f8
ff
bf
eip return value
32
25
45
08
Argument esp (main)
for a
Argument
for b
number2
number1
ebp (main)
5. Make the function and show the memory stack after the function call assuming the next instruction
after the function call is 0x08452623, esp is 0xbffff800 and ebp is 0xbffff808
#include <stdio.h>
int main()
{
int number;
printf(“Enter a number: “);
scanf(“%d”, &number);
number=square(number);
}
printf(“Your number squared is: %d”, number);
Solution:
#include <stdio.h>
int square(int a)
{
return a*a;
}
int main()
{
int number;
printf(“Enter a number: “);
scanf(“%d”, &number);
number=square(number);
}
printf(“Your number squared is: %d”, number);
Address
0xbfff7F2
0xbfff7F3
0xbfff7F4
0xbfff7F5
0xbfff7F6
0xbfff7F7
0xbfff7F8
0xbfff7F9
0xbfff7Fa
0xbfff7fb
0xbfff7fc
0xbfff7fd
0xbfff7fe
0xbfff7ff
0xbfff800
0xbfff801
0xbfff802
0xbfff803
0xbfff804
0xbfff805
0xbfff806
0xbfff807
0xbfff808
Data
prior ebp value/
08
ebp (square)/
f8
esp (square)
ff
bf
eip return value
23
26
45
08
Argument esp (main)
for a
number
ebp (main)
6. Make the function and show the memory stack after the function call assuming the next instruction
after the function call is 0x0845262A, esp is 0xbffff808 and ebp is 0xbffff818
#include <stdio.h>
int main()
{
int number1, number2;
printf(“Enter two numbers: “);
scanf(“%d %d”, &number1, &number2);
number1=sum(number1,number2);
}
printf(“Your numbers summed are: %d”, number1);
Solution:
#include <stdio.h>
int sum(int a, int b)
{
return a+b;
}
int main()
{
int number1, number2;
printf(“Enter two numbers: “);
scanf(“%d %d”, &number1, &number2);
number1=sum(number1,number2);
}
printf(“Your numbers summed are: %d”, number1);
Address
0xbfff7ff
0xbfff800
0xbfff801
0xbfff802
0xbfff803
0xbfff804
0xbfff805
0xbfff806
0xbfff807
0xbfff808
0xbfff809
0xbfff80a
0xbfff80b
0xbfff80c
0xbfff80d
0xbfff80e
0xbfff80f
0xbfff810
0xbfff811
0xbfff812
0xbfff813
0xbfff814
0xbfff815
0xbfff816
0xbfff817
0xbfff818
Data
18
f8
ff
bf
2a
26
45
08
Arg for a
prior ebp value/
ebp (sum)/
esp (sum)
eip return value
esp (main)
Arg for b
number2
number1
ebp (main)