anon
anon

Reputation:

why did not fill with zeros

Allocated array for 10000 bits = 1250 bytes(10000/8):

mov edi, 1250
call malloc

tested the pointer:

cmp rax, 0
jz .error ; error handling at label down the code

memory was allocated:

(gdb) p/x $rax
$3 = 0x6030c0

attempted to fill that allocated memory with zeros:

mov rdi, rax
xor esi, esi
mov edx, 1250 ; 10000 bits
call memset

checked first byte:

(gdb) p/x $rax
$2 = 0x6030c0
(gdb) x/xg $rax + 0
0x6030c0: 0x0000000000000000

checked last byte(0 - first byte, 1249 - last byte)

(gdb) p/x $rax + 1249
$3 = 0x6035a1
(gdb) x/xg $rax + 1249
0x6035a1: 0x6100000000000000

SOLVED QUESTION Should have typed x/1c $rax + 1249

Upvotes: 0

Views: 230

Answers (1)

Jean-François Fabre
Jean-François Fabre

Reputation: 140256

You interpreted memory as a 64 bit integer, but you forgot that endianness of intel is little endian. So bytes were reversed.

0x6100000000000000 is the value that the CPU reads when de-serializing the memory at this address. Since it's little endian, the 0x61 byte is last in memory (not very convenient to dump memory in this format, unless you have a big endian architecture)

Use x /10bx $rax + 1249 you'll see that it's zero at the correct location. The rest is garbage (happens to be zero for a while, then garbage)

0x00    0x00    0x00    0x00    0x00    0x00    0x61

Upvotes: 2

Related Questions