Question
The purpose of this assignment is for you to become better at comprehending x86-64 assembly language. You will not write assembly language code in this
The purpose of this assignment is for you to become better at comprehending x86-64 assembly language. You will not write assembly language code in this assignment. Instead you are given 5 functions in the x86-64 assembly language. Your task is to reverse engineer these functions by writing them in C. Each correct C function is worth 2 points. Your C code does not have to compile into exactly the same assembly language code that I have given you. Rather, you will be graded on whether or not your C functions properly emulate the assembly language; that is, they both should return the same value provided they are passed the same values as parameters.
.file "hw4.c"
.text
.p2align 4,,15
.globl p1
.type p1, @function
p1:
.LFB14:
.cfi_startproc
movl (%rdi), %eax
addl (%rsi), %eax
ret
.cfi_endproc
.LFE14:
.size p1, .-p1
.p2align 4,,15
.globl p2
.type p2, @function
p2:
.LFB15:
.cfi_startproc
movl %esi, %ecx
movl $1, %eax
orl %edx, %ecx
testl %edi, %ecx
jne .L3
xorl %eax, %eax
testl %edx, %esi
setne %al
.L3:
rep ret
.cfi_endproc
.LFE15:
.size p2, .-p2
.p2align 4,,15
.globl p3
.type p3, @function
p3:
.LFB16:
.cfi_startproc
leal -97(%rdi), %edx
movl $1, %eax
cmpb $25, %dl
jbe .L7
cmpb $65, %dil
je .L7
subl $48, %edi
xorl %eax, %eax
cmpb $9, %dil
setbe %al
.L7:
rep ret
.cfi_endproc
.LFE16:
.size p3, .-p3
.p2align 4,,15
.globl p4
.type p4, @function
p4:
.LFB17:
.cfi_startproc
movsbl (%rdi), %eax
movsbl (%rsi), %ecx
testb %al, %al
je .L20
testb %cl, %cl
je .L12
subl %ecx, %eax
jne .L14
movl $1, %edx
.p2align 4,,2
jmp .L15
.p2align 4,,10
.p2align 3
.L16:
testb %cl, %cl
je .L12
addq $1, %rdx
subl %ecx, %eax
jne .L14
.L15:
movsbl (%rdi,%rdx), %eax
movsbl (%rsi,%rdx), %ecx
testb %al, %al
jne .L16
.L20:
xorl %eax, %eax
.L12:
subl %ecx, %eax
.L14:
rep ret
.cfi_endproc
.LFE17:
.size p4, .-p4
.p2align 4,,15
.globl p5
.type p5, @function
p5:
.LFB18:
.cfi_startproc
subl $1, %esi
testl %esi, %esi
jle .L21
movslq %esi, %rax
xorl %edx, %edx
leaq (%rdi,%rax,4), %rax
.p2align 4,,10
.p2align 3
.L24:
movl (%rdi), %ecx
movl (%rax), %r8d
addl $1, %edx
subl $1, %esi
addq $4, %rdi
subq $4, %rax
movl %r8d, -4(%rdi)
movl %ecx, 4(%rax)
cmpl %esi, %edx
jl .L24
.L21:
rep ret
.cfi_endproc
.LFE18:
.size p5, .-p5
.ident "GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-28)"
.section .note.GNU-stack,"",@progbits
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started