Question: Using a 64-bit machine will result in incorrect answers, because the function calling conventions are different (parameters are often passed in registers). Listing for swap_n_add.c:

Using a 64-bit machine will result in incorrect answers, because the function calling conventions are different (parameters are often passed in registers).

Listing for swap_n_add.c:

1 int swap_n_add(int *xp, int *yp) {

2 int x = *xp;

3 int y = *yp;

4

5 *xp = y;

6 *yp = x;

7 return x + y;

8 }

9

10 int main(int argc, char **argv) {

11 int a1 = 534;

12 int a2 = 1057;

13 int sum = swap_n_add(&a1, &a2);

14 int diff = a1 - a2;

15

16 return sum * diff;

17 }

Compile swap_n_add and answer the following questions. Include output from gdb to support your answers:

a. Put breakpoints at line 7 and line 15 before you run the code within gdb. How many stack frames are there on the stack at each breakpoint? Give the address of each frame:

b.Reconstruct the stack at breakpoint 7, and at 15:

Line 7:

Pointers

(Register Addresses)

EBP Offset

Address

Name

Description

Value

ebp - 16

ebp - 12

ebp - 8

ebp - 4

ebp

ebp + 4

ebp + 8

ebp + 12

Line 15:

Pointers

(Register Addresses)

EBP Offset

Address

Name

Description

Value

ebp - 24

ebp - 20

ebp - 16

ebp - 12

ebp - 8

ebp - 4

ebp

ebp + 4

ebp + 8

ebp + 12

c. Show the return value of main through register inspection

d. Issue the following commands:

(gdb) list swap_n_add

(gdb) disas swap_n_add

Group the assembly code instructions with their corresponding statements in

swap_n_add

to the best of your ability.

e. What is the value of both a1 and a2 before swap_n_add? After? What would be the

value of diff if the call to swap_n_add did not occur?

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!