Обозначенная массив на 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
Последний байт равен нулю: 0x61000000000000 ** 00 **. Когда вы читаете 8 байтов, вы получаете 7 байтов после последнего, и вы не просите об их обнулении. – PetSerAl
Я использую intel x64 (i3) с небольшим количеством endian. Итак, похоже, что самый старший байт (0x61) должен быть последним в буфере? Или я ошибаюсь, правильно, пожалуйста. –
Вам нужно использовать '$ rax + 1242' для чтения 8 последних байтов вашего буфера. Теперь вы читаете только 1 последний байт своего буфера плюс 7 байт после вашего буфера. Это 7 байт не должно быть равным нулю. – PetSerAl