Assembly Language. Lecture 5 Procedures

Similar documents
Assembly Language. Lecture 5 Procedures

Assembly Language for Intel-Based Computers, 4 th Edition. Chapter 5: Procedures. Chapter Overview. The Book's Link Library

Assembly Language for Intel-Based Computers, 4 th Edition

Assembly Language for Intel-Based Computers, 4 th Edition. Chapter 5: Procedures

Libraries and Procedures

Libraries and Procedures

COE 205. Computer Organization and Assembly Language Dr. Aiman El-Maleh

Microprocessors ( ) Fall 2010/2011 Lecture Notes # 15. Stack Operations. 10 top

Assembly Language for Intel-Based Computers, 4 th Edition

AM2: Programming with Contemporary Instruction Set

Lab 5: Input/Output using a Library of Procedures

Islamic University Gaza Engineering Faculty Department of Computer Engineering ECOM 2125: Assembly Language LAB

AM2: Protected-Mode Programming

Islamic University Gaza Engineering Faculty Department of Computer Engineering ECOM 2125: Assembly Language LAB. Lab # 7. Procedures and the Stack

Islamic University Gaza Engineering Faculty Department of Computer Engineering ECOM 2125: Assembly Language LAB. Lab # 10. Advanced Procedures

Marking Scheme. Examination Paper Department of CE. Module: Microprocessors (630313)

Assembly Language Lab # 9

Procedure. Computer Organization and Assembly Languages Yung-Yu Chuang 2007/12/24. with slides by Kip Irvine

Lab 2: Introduction to Assembly Language Programming

Lab 4: Basic Instructions and Addressing Modes

Marking Scheme. Examination Paper. Module: Microprocessors (630313)

Assembly Language for Intel-Based Computers, 4 th Edition. Chapter 8:Advanced Procedures

Marking Scheme. Examination Paper. Module: Microprocessors (630313)

CS 16: Assembly Language Programming for the IBM PC and Compatibles

COMPUTER ENGINEERING DEPARTMENT

Lecture 15 Intel Manual, Vol. 1, Chapter 3. Fri, Mar 6, Hampden-Sydney College. The x86 Architecture. Robb T. Koether. Overview of the x86

Assembly Language. Lecture 3 Assembly Fundamentals

Practical Malware Analysis

The x86 Architecture

Program Exploitation Intro

Assembly Language Programming: Procedures. EECE416 uc. Charles Kim Howard University. Fall

Assembly Language for Intel-Based Computers, 5 th Edition

Assembly Language for Intel-Based Computers, 5 th Edition. Chapter 9: Strings and Arrays

Assembly Language Programming

Assembly Language. Lecture 2 x86 Processor Architecture

Advanced Procedures. Computer Organization and Assembly Languages Yung-Yu Chuang 2005/11/24. with slides by Kip Irvine

Objectives. ICT106 Fundamentals of Computer Systems Topic 8. Procedures, Calling and Exit conventions, Run-time Stack Ref: Irvine, Ch 5 & 8

3.1 DATA MOVEMENT INSTRUCTIONS 45

Islamic University Gaza Engineering Faculty Department of Computer Engineering ECOM 2125: Assembly Language LAB

EECE.3170: Microprocessor Systems Design I Summer 2017 Homework 4 Solution

In order to run the program, go to the folder Release and run project.exe.

Assembly Language for Intel-Based Computers, 5 th Edition. Kip Irvine. Chapter 3: Assembly Language Fundamentals

Lab 6: Conditional Processing

Computer Architecture and Assembly Language. Practical Session 3

GLOBAL EDITION. Assembly Language. for x86 Processors SEVENTH EDITION. Kip R. Irvine

Computer Systems Lecture 9

Assembly Language for Intel-Based Computers, 4 th Edition. Chapter 3: Assembly Language Fundamentals

Lab 3: Defining Data and Symbolic Constants

Islamic University Gaza Engineering Faculty Department of Computer Engineering ECOM 2125: Assembly Language LAB. Lab # 8. Conditional Processing

Stack -- Memory which holds register contents. Will keep the EIP of the next address after the call

Introduction to Assembly Language

Assembly Language for Intel-Based Computers, 5 th Edition. Chapter 3: Assembly Language Fundamentals

Marking Scheme. Examination Paper Department of CE. Module: Microprocessors (630313)

Chapter 3: Addressing Modes

Module 3 Instruction Set Architecture (ISA)

Assembly Language. Lecture 2 - x86 Processor Architecture. Ahmed Sallam

Assembly Language for Intel-Based Computers, 4 th Edition. Lecture 25: Interface With High-Level Language

6/20/2011. Introduction. Chapter Objectives Upon completion of this chapter, you will be able to:

We can study computer architectures by starting with the basic building blocks. Adders, decoders, multiplexors, flip-flops, registers,...

Digital Forensics Lecture 3 - Reverse Engineering

CNIT 127: Exploit Development. Ch 1: Before you begin. Updated

administrivia today start assembly probably won t finish all these slides Assignment 4 due tomorrow any questions?

Chapter 3 (Part a) Assembly Language Fundamentals

Low-Level Essentials for Understanding Security Problems Aurélien Francillon

Function Calls COS 217. Reading: Chapter 4 of Programming From the Ground Up (available online from the course Web site)

Chapter Overview. Assembly Language for Intel-Based Computers, 4 th Edition. Chapter 3: Assembly Language Fundamentals.

Introduction to Assembly Language

22 Assembly Language for Intel-Based Computers, 4th Edition. 3. Each edge is a transition from one state to another, caused by some input.

Conditional Processing

Stack, subprograms. procedures and modular programming role of stack while using procedures stack implementation (Pentium)

X86 Addressing Modes Chapter 3" Review: Instructions to Recognize"

The Instruction Set. Chapter 5

EECE416 :Microcomputer Fundamentals and Design. X86 Assembly Programming Part 1. Dr. Charles Kim

Basic Execution Environment

Assembly Fundamentals

x86 assembly CS449 Fall 2017

complement) Multiply Unsigned: MUL (all operands are nonnegative) AX = BH * AL IMUL BH IMUL CX (DX,AX) = CX * AX Arithmetic MUL DWORD PTR [0x10]

Complex Instruction Set Computer (CISC)

UMBC. 1 (Feb. 9, 2002) seg_base + base + index. Systems Design & Programming 80x86 Assembly II CMPE 310. Base-Plus-Index addressing:

Chapter 3: Assembly Language Fundamentals. Cristina G. Rivera

COMPUTER ENGINEERING DEPARTMENT

Assembly Language Fundamentals

An Introduction to x86 ASM

Dr. Ramesh K. Karne Department of Computer and Information Sciences, Towson University, Towson, MD /12/2014 Slide 1

CS61 Section Solutions 3

Lecture 2 Assembly Language

Summary: Direct Code Generation

Experiment 8 8 Subroutine Handling Instructions and Macros

Scott M. Lewandowski CS295-2: Advanced Topics in Debugging September 21, 1998

Assembly Language Fundamentals

Chapter 7 Integer Arithmetic

CSC 2400: Computer Systems. Towards the Hardware: Machine-Level Representation of Programs

CSC 8400: Computer Systems. Machine-Level Representation of Programs

Language of x86 processor family

Procedures and the Stack. Chapter 4 S. Dandamudi

Assembly Language: Function Calls

Lab 3. The Art of Assembly Language (II)

Assembly Language for Intel-Based Computers, 4 th Edition. Chapter 2: IA-32 Processor Architecture Included elements of the IA-64 bit

Introduction to IA-32. Jo, Heeseung

Assembly Language: Function Calls" Goals of this Lecture"

Transcription:

Assembly Language Lecture 5 Procedures Ahmed Sallam Slides based on original lecture slides by Dr. Mahmoud Elgayyar

Data Transfer Instructions Operand types MOV, MOVZX, MOVSX instructions LAHF, SAHF instructions XCHG instruction Addition and Subtraction INC and DEC instructions ADD, SUB instructions NEG instruction Data Related Operators and Directives Indirect Addressing Arrays and pointers JMP and LOOP instructions Outcomes of Lecture 4 2

Linking to External Library The Irvine library Stack Operations Runtime Stack PUSH, POP instructions Defining and Using Procedures PROC directive CALL and RET instructions Outline 3

Linking to External Library The Irvine library Stack Operations Runtime Stack PUSH, POP instructions Defining and Using Procedures PROC directive CALL and RET instructions Outline 4

Assembly & Execution We write.asm files containing ASCII (i.e., text) versions of our program MASM assembles our.asm file into a.obj file unlinked, Intel32 binary code All the.obj files are linked to create an executable a.exe file The.exefileisloaded into main memory, addresses are resolved, and the program is executed 5

Do you remember?! (Example: Adding and Subtracting Integers 2 nd version) INCLUDE Irvine32.inc.386.model flat, stdcall.stack 4096 ExitProcess PROTO, dwexitcode:dword DumpRegs PROTO.code main PROC mov eax,10000h ;EAX=10000h add eax,40000h ;EAX = 50000h sub eax,20000h ;EAX = 30000h call DumpRegs ;display registers exit main ENDP END main.code main PROC mov eax,10000h ;EAX = 10000h add eax,40000h ;EAX = 50000h sub eax,20000h ;EAX = 30000h call DumpRegs ;display registers INVOKE ExitProcess, 0 main ENDP END main Assembly 6

Link Library Overview Procedure: Same thing as a "method" in java or a "function" in C Link Library: A bunch of.obj files merged together A file containing compiled procedures OBJ files are assembled from ASM source files Library built using the Microsoft LIB utility (or similar tool) Irvine32.lib is an example of a link library Library is linked (i.e., joined) to your.asm file when you build your project 7

Linking to a Library Notice the two LIB files: Irvine32.lib and kernel32.lib (Part of the Microsoft Win32 SDK) Your program links to Irvine32.lib links to can link to kernel32.lib executes kernel32.dll 8

Calling a Procedure Call/Use a (library) procedure using the CALL instruction Some procedures require input arguments, which must be pre placed in the proper location => a register The INCLUDE directive copies in the procedure prototypes (same thing as #include <stdio.h>) INCLUDE Irvine32.inc.code mov eax, 1234h ; input argument call WriteHex ; show hex number call Crlf ; end of line Assembly 9

Library Procedures Clrscr Crlf Delay DumpMem DumpRegs GetCommandtail GetDateTime MsgBox, MsgBoxAsk IsDigit ParseDecimal32 ParseInteger32 Random32 Clears console, locates cursor at upper left corner Writes end of line sequence to standard output Pauses program execution for n millisecond interval Writes block of memory to standard output in hex Displays general-purpose registers and flags (hex) Copies command-line args into array of bytes Gets the current date and time from the system Display popup message boxes Sets Zero flag if AL contains ASCII code for decimal digit (0 9) Converts unsigned integer string to binary Converts signed integer string to binary Generates 32-bit pseudorandom integer in the range 0 to FFFFFFFFh Assembly 10

Library Procedures OpenInputFile CloseFile CreateOutputFile ReadFromFile WriteToFile ReadChar, ReadDec, ReadHex, ReadInt, ReadString WriteChar, WriteDec, WriteString, WriteHex, WriteInt, WriteBin Str_compare, Str_copy, StrLength, Str_trim, Str_ucase WaitMsg Opens existing file for input Closes an open disk file Creates new disk file for writing in output mode Reads input disk file into buffer Writes buffer to output file Read from standard input Write to standard output String operations Displays message, waits for Enter to be pressed DON'T memorize!! Just know what can be done and be able to look them up for argument/parameter details (pgs 134 149) Assembly 11

.code call Clrscr Example 1 Clear the screen, delay the program for 500 milliseconds, and dump the registers and flags mov eax,500 call Delay call DumpRegs Sample output: EAX=00000613 EBX=00000000 ECX=000000FF EDX=00000000 ESI=00000000 EDI=00000100 EBP=0000091E ESP=000000F6 EIP=00401026 EFL=00000286 CF=0 SF=1 ZF=0 OF=0 Assembly 12

Example 2 Display a null terminated string and move the cursor to the beginning of the next screen line..data str1 BYTE "Bus Strikes Really Suck!",0.code mov edx,offset str1 call WriteString call Crlf Assembly 13

Avoiding call Crlf Display a null terminated string and move the cursor to the beginning of the next screen line (use embedded CR/LF).data str1 BYTE "The lab was too long!",0dh,0ah,0.code mov edx, OFFSET str1 call WriteString Assembly 14

testval = 35.code mov eax, testval call WriteBin call Crlf call WriteDec call Crlf call WriteHex call Crlf Example 3 Display an unsigned integer in binary, decimal, and hexadecimal, each on a separate line Sample output: ; display binary ; display decimal ; display hexadecimal 0000 0000 0000 0000 0000 0000 0010 0011 35 23 Assembly 15

Example 4 Input a string from the user EDX points to the string and ECX specifies the maximum number of characters the user is permitted to enter Note: null (zero) byte is automatically added by ReadString.data filename BYTE 80 DUP(0).code mov edx, OFFSET filename mov ecx, SIZEOF filename ;readstring will read sizeof-1 call ReadString Assembly 16

Example 5 Generate and display ten pseudo random (semi random) signed integers in the range 0 99 Pass each integer to WriteInt (via EAX) and display it on a separate line.code mov ecx,10 ; loop counter gennum: mov eax,100 ; ceiling value call RandomRange ; generate random int call WriteInt ; display signed int call Crlf ; goto next display line loop gennum ; repeat loop Assembly 17

Review Questions 1. What types of statements are inside the Irvine32.inc file? 2. (True/False): A link library consists of assembly language source code. 3. Write statements that cause a program to pause for 700 milliseconds. 4. Write statements that prompt the user for an identification number and input a string of digits into an array of bytes. 18

Linking to External Library The Irvine library Stack Operations Runtime Stack PUSH, POP instructions Defining and Using Procedures PROC directive CALL and RET instructions Outline 19

Imagine a stack of plates: Runtime Stack plates are only added to the top = "pushed" on the stack plates are only removed from the top = "pulled" from the stack LIFO structure "Last In, First Out" 1 2 3 4 5 6 7 8 9 10 top bottom 20

x86 CPU Stack Managed by the CPU, using two registers SS (stack segment) Segment being used for stack ESP (stack pointer) Pointer/Address/Offset of TOP of Stack In reality, the stack pointer starts at the highest location in the stack segment 0018FF80 0018FF82 0018FF84 0018FF86 0018FF88 0018FF8A 00 00 ESP 21

PUSH 1. A 16 bit push operation decrements the stack pointer by 4, and 2. Copies a value into the location pointed to by the stack pointer Before After 0018FF80 0018FF80 0018FF82 0018FF82 0018FF84 0018FF84 0018FF86 0018FF86 0018FF88 0018FF88 11 11 ESP 0018FF8A 00 00 ESP 0018FF8A 00 00 22

More Pushing After pushing two more integers: 0018FF80 0018FF82 0018FF84 0018FF86 0018FF88 0018FF8A 33 33 22 22 11 11 00 00 ESP The stack grows downward (into LOWER addresses/offsets) The area below ESP is always available (unless the stack overflows) Overflow: When segment is filled (and no more space is available) 23

POP 1. Copies value at stack[esp] into a register or variable, and 2. Adds n to ESP, where n is either 2 or 4 (depending on size of destination) After 0018FF80 0018FF82 ESP 0018FF84 0018FF86 0018FF88 0018FF8A 00 00 ECX 24

PUSH syntax: 1. PUSH r/m16 r/m = register/memory 2. PUSH r/m32 3. PUSH imm32 POP syntax: 1. POP r/m16 2. POP r/m32 PUSH, POP Formats 25

Using PUSH and POP Save and restore registers when they contain important values PUSH and POP instructions occur in the opposite order (LIFO) push esi push ecx push ebx ; push registers mov esi,offset dwordval ; display some memory mov ecx,lengthof dwordval mov ebx,type dwordval call DumpMem pop ebx pop ecx pop esi The DumpMem procedure writes a range of memory to the console window in hexadecimal. Pass it the starting address in ESI, the number of units in ECX, and the unit size in EBX ; restore registers Assembly 26

Example: Nested Loop Idea: Use stack to save loop counter of outer loop when in inner loop push the outer loop counter before entering the inner loop mov ecx, 100 ; set outer loop count outer: ; begin the outer loop push ecx ; save outer loop count mov ecx, 20 ; set inner loop count inner: ; begin the inner loop Code for inner loop goes here loop inner ; repeat the inner loop pop ecx ; restore outer loop count loop outer ; repeat the outer loop Assembly 27

Related Instructions 1. PUSHFD and POPFD push and pop the EFLAGS register 2. PUSHAD pushes the 32 bit general purpose registers on the stack order: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI 3. POPAD pops the same registers off the stack in reverse order 4. PUSHA and POPA do the same for 16 bit registers 28

Review Questions 1. When a 32 bit value is pushed on the stack, what happens to ESP? 2. (True/False) Only 32 bit values should be pushed on the stack when using the Irvine32 library. 3. (True/False) Only 16 bit values should be pushed on the stack when using the Irvine16 library. 4. (True/False) Local variables in procedures are created on the stack. 5. Challenge: Suppose there were no PUSH instruction. Write a sequence of two other instructions that would accomplish the same as PUSH EAX. 29

Linking to External Library The Irvine library Stack Operations Runtime Stack PUSH, POP instructions Defining and Using Procedures PROC directive CALL and RET instructions Outline 30

Large problems can be divided into smaller tasks to make them more manageable Creating Procedures A procedure is the ASM equivalent of a Java Method, C/C++ Function, Basic Subroutine, or Pascal Procedure Same thing as what is in the Irvine32 library The following is an assembly language procedure named sample: sample PROC Code for procedure goes here ret sample ENDP 31

SumOf Procedure ;----------------------------------------------------- ; ; Calculates and returns the sum of three 32-bit ints ; Receives: EAX, EBX, ECX, the three integers ; may be signed or unsigned. ; Returns: EAX = sum ; status flags are changed. ; Requires: nothing ;----------------------------------------------------- SumOf PROC add eax,ebx add eax,ecx Ret SumOf ENDP Assembly 32

CALL and RET The CALL instruction calls a procedure 1. pushes offset of next instruction on the stack (saves the value of the instruction pointer) 2. copies the address of the called procedure into EIP (puts the address of the procedure into the instruction pointer) 3. Begins to execute the code of the procedure The RET instruction returns from a procedure 1. pops top of stack into EIP (over writes instruction pointer with the value of the instruction after the call) 33

CALL RET Example 0000025 is the offset of the instruction immediately following the CALL instruction 00000040 is the offset of the first instruction inside MySub main PROC 00000020 call MySub 00000025 mov eax,ebx.. main ENDP MySub PROC 00000040 mov eax,edx.. ret MySub ENDP Assembly 34

CALL RET in Action The CALL instruction pushes 00000025 onto the stack, and loads 00000040 into EIP CALL = PUSH eip MOV EIP, OFFSET proc 00000025 ESP 00000040 EIP The RET instruction pops 00000025 from the stack into EIP RET = POP eip 00000025 ESP 00000025 EIP (stack shown before RET executes) Assembly 35

Nested Procedure Calls main PROC.. call Sub1 exit main ENDP By the time Sub3 is called, the stack contains all three return addresses: Sub1 PROC.. call Sub2 ret Sub1 ENDP Sub2 PROC.. call Sub3 ret Sub2 ENDP Sub3 PROC.. ret Sub3 ENDP (ret to main) (ret to Sub1) (ret to Sub2) ESP Assembly 36

Local and Global Labels 1. A local label is visible only inside the same procedure 2. A global label is visible everywhere main PROC jmp L2 ; error call sub2 L1:: ; global label exit main ENDP sub2 PROC L2: ; local label 0018FF80 0018FF84 0018FF88 0018FF8C 00 00 jmp L1 ; legal, but stupid ret ; When is ret ever called? sub2 ENDP Assembly 37 ESP

Without Parameters The ArraySum procedure calculates the sum of an array. It makes two references to specific variable names: ArraySum PROC mov esi,0 ; array index mov eax,0 ; set the sum to zero mov ecx,lengthof myarray ; set number of elements foreach: add eax,myarray[esi] add esi,4 loop foreach mov thesum,eax ret ArraySum ENDP ; add each integer to sum ; point to next integer ; repeat for array size ; store the sum This procedure needs parameters so that the array name and result location can be passed in/out and permit the function to be used with different arrays. Assembly 38

With Parameters This version of ArraySum returns the sum of any doubleword array whose address is in ESI. The sum is returned in EAX: ; Add an array of doublewords ; ESI = address of array, ECX = no. of elements ; Returns: EAX = sum; ECX, ESI, & flags changed ArraySum PROC mov eax,0 foreach: add eax,[esi] add esi,4 loop foreach ; set the sum to zero ; add each integer to sum ; point to next integer ; repeat for array size ret ArraySum ENDP Assembly 39

USES Operator Lists the registers that are used by a procedure MASM inserts code that will try to preserve them ArraySum PROC USES esi ecx mov eax,0 etc. ; set the sum to zero MASM generates the code shown in gold: ArraySum PROC push esi push ecx.. pop ecx pop esi ret ArraySum ENDP 40

Review Questions 1. (True/False): It is possible to define a procedure inside an existing procedure. 2. What would happen if the RET instruction was omitted from a procedure? 3. (True/False): The CALL instruction pushes the offset of the CALL instruction on the stack. 4. (True/False): In protected mode, each procedure call uses a minimum of 4 bytes of stack space. 5. (True/False): The USES operator only generates PUSH instructions, so you must code POP instructions yourself. 41

Linking to External Library The Irvine library Stack Operations Runtime Stack PUSH, POP instructions Defining and Using Procedures PROC directive CALL and RET instructions Summary 42