@fsociety_one

Почему падает ядро при записи в массив?

Приветствую всех, возникла проблема. Имеется код в программе:
field db '1', '2', '3', '4', '5', '6', '7', '8', '9'
move resb 1

_move:
        mov	edx, 1
        mov	ecx, move 
        mov	ebx, 1
        mov	eax, 4
        int	0x80

        mov     eax, move
        mov     ebx, field
        add      ebx, eax

        call     _clear

        mov     [ebx], byte 'X'

        ret

Опытным путём, узнал, что call _clear выполняется, а вот при подставке 'X' в [ebx] падает с сообщением:
23988 segmentation fault (core dumped)
В move поступает число с помощью ввода, программа запрашивает его, и пользователь вводит число от 1 до 9
Если же вместо строки:
add ebx, eax
Написать:
add ebx, 2
То всё корректно выполняется, как я подозреваю, проблема в том, что ввод с строки не является числом, а ASCII символом, но не знаю как его обработать и вообще, так ли это, надеюсь на вашу помощь, спасибо!
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 2
@galaxy
я подозреваю, проблема в том, что ввод с строки не является числом, а ASCII символом

Зачем подозревать, дебаггером посмотрите.
Тут другая проблема имеется: move - 1 байт, а в eax вы суете (и потом складываете) 4. Конечно, там мусор оказывается
Ответ написан
@none7
mov     eax, move
mov     ebx, field

Это присвоение указателей на переменные? А затем сложение двух указателей и запись в этот мусор? Возможно movzx eax, byte ptr [move]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы