Lance
Lance

Reputation: 39

Debugging Issue on Assemble Code by using GDB

I tried to use gdb to debug the Assemble code but got error message,it said:

(gdb) run Starting program: /root/assembler_program/bsawp.o
/bin/bash: /root/assembler_program/bsawp.o: cannot execute binary file

The code:

.section .text
.globl _start
_start:
nop
movl 0x12345678 ,  %ebx
bswap %ebx    
movl $1 , %eax
int $0x80

Then I use gdb :

(gdb) break *_start+1
Breakpoint 1 at 0x400079
(gdb) run
Starting program: /root/assembler_program/bsawp

Breakpoint 1, 0x0000000000400079 in _start ()
(gdb) step
Single stepping until exit from function _start,
which has no line number information.

Program received signal SIGSEGV, Segmentation fault.
0x0000000000400079 in _start ()

Could you please provide any hint and suggestion?

Thanks! Best regards

Upvotes: 1

Views: 897

Answers (1)

Employed Russian
Employed Russian

Reputation: 213526

Here:

Starting program: /root/assembler_program/bsawp.o

you are trying to run a relocatable object file. Don't do that.

You must link your object into an executable first. Something like this:

gcc -nostdlib -nostartfile test.s

Here:

Starting program: /root/assembler_program/bsawp

you apparently did link the bsap.o into an executable. The crash is happening here:

(gdb) x/i $pc
=> 0x400079 <_start+1>: mov    0x12345678,%ebx

This instruction is trying to load value from address 0x12345678, into register. But that address does not point to a valid memory location.

You most likely meant for it to load a constant 0x12345678, in which case the instruction you want is:

movl $0x12345678, %ebx

With that fix, I get expected:

(gdb) run
Starting program: /tmp/a.out 
[Inferior 1 (process 238270) exited with code 022]
(gdb) p/x 022
$1 = 0x12

Upvotes: 1

Related Questions