I have this source code:
; hello.asm a first program for nasm for Linux, Intel, gcc ; ; assemble: nasm -f elf -l hello.lst hello.asm ; link: gcc -o hello hello.o ; run: hello ; output is: Hello World SECTION .data ; data section msg: db "Hello World",10 ; the string to print, 10=cr len: equ $-msg ; "$" means "here" ; len is a value, not an address SECTION .text ; code section global main ; make label available to linker main: ; standard gcc entry point mov edx,len ; arg3, length of string to print mov ecx,msg ; arg2, pointer to string mov ebx,1 ; arg1, where to write, screen mov eax,4 ; write command to int 80 hex int 0x80 ; interrupt 80 hex, call kernel mov ebx,0 ; exit code, 0=normal mov eax,1 ; exit command to kernel int 0x80 ; interrupt 80 hex, call kernel This code is taken from here.
I am running ubuntu 12.04 32-bit on VirtualBox for learning purposes.
Steps I follow are:
- nasm -f elf -g -F stabs hello.asm
- ld -o hello hello.o
- gdb hello -tui
Now when I only run hello it will run fine but gdb fails to show any source code. Why? When I tryp run in gdb I will see Hello World text just fine but it does not show the source.
sifor example,gdbwill happily show you the source code.sicommand to single step instructions.gdbwill correctly show the source code. Usestartinstead ofrunor place a breakpoint manually first.