<- previous    index    next ->

Lecture 5 Using debugger

See www.csee.umbc.edu/help/nasm/nasm.shtml for notes on using debugger.

A program that prints where its sections are allocated
(in virtual memory) is where.asm

; where.asm   print addresses of sections
; Assemble:	nasm -f elf -l where.lst  where.asm
; Link:		gcc -o where  where.o
; Run:		where
; Output:	you need to run it, on my computer
; data    a: at 8048330
; bss     b: at 804840C
; rodata  c: at 804956C
; code main: at 8049424

        extern	printf		; the C function, to be called
        section .data		; Data section, initialized variables
a:	db	0,1,2,3,4,5,6,7
fmt:    db "data    a: at %X",10
	db "bss     b: at %X",10
	db "rodata  c: at %X",10
	db "code main: at %X",10,0 

	section .bss		; reserved storage, uninitialized
b:	resb	8

	section	.rodata		; read only initialized storage
c:	db	7,6,5,4,3,2,1,0
	
        section .text           ; Code section.
        global main		; the standard gcc entry point
main:				; the program label for the entry point
        push	ebp
	mov     ebp,esp
	push	ebx

	lea	eax,[a]		; load effective address of [a]
	push	eax
	lea	ebx,[b]
        push    ebx
	lea	ecx,[c]
	push	ecx
	lea	edx,[main]
	push	edx
        push    dword fmt	; address of format string
        call    printf		; Call C function
        add     esp, 20		; pop stack 5 push times 4 bytes

	pop	ebx
	mov	esp,ebp
	pop	ebp
	mov	eax,0		; normal, no error, return value
	ret			; return
	

    <- previous    index    next ->

Other links

Go to top