10000位的分配数组= 1250字节(10000/8):
mov edi, 1250
call malloc
测试指针:
cmp rax, 0
jz .error ; error handling at label down the code
分配了内存:
(gdb) p/x $rax
$3 = 0x6030c0
尝试用零填充分配的内存:
mov rdi, rax
xor esi, esi
mov edx, 1250 ; 10000 bits
call memset
检查第一个字节:
(gdb) p/x $rax
$2 = 0x6030c0
(gdb) x/xg $rax + 0
0x6030c0: 0x0000000000000000
检查最后一个字节(0 - 第一个字节,1249-最后一个字节)
(gdb) p/x $rax + 1249
$3 = 0x6035a1
(gdb) x/xg $rax + 1249
0x6035a1: 0x6100000000000000
已解决的问题
应该输入x/1c $rax + 1249
答案 0 :(得分:2)
您将内存解释为64位整数,但您忘记了英特尔的字节序是小端。所以字节反转了。
0x6100000000000000
是CPU在此地址反序列化内存时读取的值。由于它是小端,0x61
字节在内存中是最后一个(以这种格式转储内存不太方便,除非你有一个大端架构)
使用x /10bx $rax + 1249
您会在正确的位置看到它为零。剩下的就是垃圾(暂时是零,然后是垃圾)
0x00 0x00 0x00 0x00 0x00 0x00 0x61