Luigi Tiburzi
Luigi Tiburzi

Reputation: 4325

Strange variables with gdb

I am using gdb to debug a program in x86 assembly. Though I have a strange behavior of some variables and I can't understand why.

This is how I define and view them:

section .data
CountDied: dd 0000
OnesFound: db 00

section .text
global _start
_start:
nop
... code

When I run gdb step by step I check if the variable have the correct value at the very first instruction and I get the following:

print CountDied
$1=0
print OnesFound
$2=167772672

Though in the next instructions OnesFound seems to behave in a correct way. I'm really puzzled. Thanks for your suggestions.

Upvotes: 1

Views: 102

Answers (1)

Dirk Holsopple
Dirk Holsopple

Reputation: 8831

An assembly "variable" is just a label for a specific point in memory. GDB doesn't know how big it is supposed to be, it's just assuming that it's a 32-bit value.

The hex representation of the number you're getting is 0x0A000200. x86 is a little endian platform, so that will actually be stored in memory as 00 02 00 0A. Only the first byte is actually part of the value you set, and it is set correctly.

You can view just the specific byte you want with by using the command x/b &OnesFound instead of using print.

Upvotes: 4

Related Questions