CSC231 Homework 2
<meta name="keywords" content="computer science, assembly language, pentium, exercise, machine language, intel" /> <meta name="description" content="Dominique Thiebaut's Web Page" /> <meta name="title" content="Dominique Thiebaut -- Computer Science" /> <meta name="abstract" content="Dominique Thiebaut's Computer Science Web pages" /> <meta name="author" content="thiebaut at cs.smith.edu" /> <meta name="distribution" content="Global" /> <meta name="revisit-after" content="10 days" /> <meta name="copyright" content="(c) D. Thiebaut 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,2008" /> <meta name="robots" content="FOLLOW,INDEX" />
Assignment #2
This assignment is due on Friday, Sept 26th, at 11:59 p.m. plus 1 minute.
Problem #1
Write a program that displays the following pattern using loops.
**********#
*********##
********###
*******####
******#####
*****######
****#######
***########
**#########
*##########
**#########
***########
****#######
*****######
******#####
*******####
********###
*********##
**********#
Requirements:
- Your program cannot contain more than 5 int 0x80 instructions!
or
- Your program should use nested loops!
Store your program in a file called hw2a.asm and submit it as follows:
submit hw2 hw2a.asm
Problem #2
For this problem you have to debug a program whose source code is so cryptic that it is (almost) impossible to recognize the instructions...
Its code is given below:
section .data
msg db 0x61,0x20,0x6D,0x61,0x6E,0x20,0x61,0x20,0x70
db 0x6C,0x61,0x6E,0x20,0x61,0x20,0x63
msgL equ $-msg
db 0x68,0x61,0x72,0x61,0x63,0x74,0x65,0x72,0x20
db 0x61,0x20,0x62,0x6C,0x6F,0x67,0x21
lf db 0x0A,0x0A
section .text
global _start
_start:
db 0x90,0x90
db 0xBE
dd msg
db 0xBF,
dd lf-2
db 0xB9, 0x10, 0, 0, 0, 0x8A, 6, 0x88, 7
db 0x46, 0x81, 0xEF,1, 0, 0, 0
db 0xe2, 0xf3
db 0xA1
dd msg
db 0xBa, 0, 0, 0, 0,
db 0x8B, 0x1D
dd msg+4
db 0xF7, 0xE3
db 0x90, 0x90
db 0xb8
dd 1
db 0xbb
dd 0
db 0xcd, 0x80
- Open a new file in your Linux account, and call it hw2.asm.
- Paste the code above in it.
- Assemble and link it:
nasm -f elf -F stabs hw2.asm ld -o hw2 hw2.o
- Debug it!
ddd hw2 &
- Because the instructions are provided in the code as opcodes (in hex), ddd will disassemble the program for you, and will show something like this:
(I had all the windows open under the "View" menu option.)
It's a bit ugly, because ddd does not have the original instructions and is recreating them for us (disassembly process) using a syntax different from the one nasm uses, but we recognize them, somehow. I have used instructions we haven't seen yet to make this problem more challenging, and force you to learn to use the debugger better.
Right click on the address of the second nop instruction, at the top, and set a breakpoint. A small red STOP sign should appear on this line.
- Then run the program by clicking on the Run button of the floating toolbar (or by pressing F2).
- Then it's a matter of clicking Stepi and gathering the information you need to answer the questions below.
Question 1
What string of characters is contained in the array that occupies the first 31 bytes of data memory when the processor has reached the 3rd NOP instruction of the program?
Question 2
What hexadecimal values are stored in the registers eax, ebx, ecx, and edx when the processor has reached the 3rd NOP instruction of the program?
Write your answers in a file called hw2.txt and submit your file as follows:
submit hw2 hw2.txt