CSC231 Homework 2

From dftwiki3
Revision as of 15:21, 22 September 2008 by Thiebaut (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

<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" />

Back to CSC231 Main Page


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:

231 hw2 ddd Window.png

(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