sys_write выводит дополнительные символы - PullRequest
0 голосов
/ 27 октября 2019

Итак, я пишу программу на основе меню, которая может отображать сообщение (помимо прочего, я еще не реализовал). У меня есть следующий сегмент:

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 может измениться.

1 Ответ

0 голосов
/ 28 октября 2019

Вы сказали, что он выводит все строки, когда пытался вывести только одну из них, называемую msg.

. Вы можете создать цикл, используя CMP и JE (или JZ,они одинаковые) считать до NULL. Затем вы можете использовать это число как LEN для печати строк.

...