Итак, я пишу программу на основе меню, которая может отображать сообщение (помимо прочего, я еще не реализовал). У меня есть следующий сегмент:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
По любой причине, это выводит строку, хранящуюся в msg
, плюс все другие строки, которые я сохранил в моем разделе .data
. Я запустил программу с помощью gdb и распечатал содержимое rsi и rdx непосредственно перед системным вызовом - они содержат строку, которую я хочу вывести, и длину этой строки, как и ожидалось. Но после системного вызова rax
содержит 2048. Если я правильно понимаю, это означает, что в консоль было записано 2048 символов - намного больше, чем 30, которые я указал прямо перед системным вызовом. Я предполагаю, что другие строки, которые у меня были, были сохранены сразу после того, как msg
хранится в памяти, поэтому они получают вывод, но почему он игнорирует rdx?
Для чего это стоит, код работает нормально, еслиmsg_len
является неизменным, но мне нужно, чтобы оно было изменяемым, потому что msg
может измениться.