Изменение массива символов asm x64 LinuxLinux

Ответить
Anonymous
 Изменение массива символов asm x64 Linux

Сообщение Anonymous »

Я изучаю asm несколько дней и столкнулся с некоторыми проблемами. Мне нужно напечатать некоторый текст (пример int в строку или переменную строку) в asm, и сейчас я использую буфер. У меня есть функция asm, которая может записать любую строку любого размера:

Код: Выделить всё

.print:
push rcx                    ; save increment if used in another function
xor rcx, rcx                ; reset increment to 0

.print_loop:
cmp byte [rsi + rcx], 0     ; check if null
je .print_done              ; if yes print the value beacause end of string
inc rcx                     ; else increment
jmp .print_loop             ; and restart the operation

.print_done:
mov rdx, rcx                ; pass the string size as parameter syscall sys_write
mov rax, 1                  ; prepare syscall sys_write function
mov rdi, 1                  ; prepare syscall stdout output
syscall                     ; print the string
pop rcx                     ; get the old increment value to handle return
ret
Но буфер очень раздражает, если моя строка больше, потому что я вынужден инициализировать новый буфер каждый раз, когда мне нужно отобразить строку, и не могу обрабатывать конкатенацию строк, если моя новая строка больше, чем мне разрешено.

Код: Выделить всё

section .bss
buffer resb 20                  ; Buffer for int to string
buffer resb 100                 ; buffer for message and other text
; ... other buffer if needed
У меня есть идея реализовать переменную строку, но она выглядит плохо... Я думаю, что могу использовать brk, но я предпочитаю не использовать раздел bss и то же самое для mmap
код>. Я чувствую, что могу использовать стек для создания локальной переменной и перемещения базового указателя для обработки моего нового подстека стека, но я не думаю, что это хорошее решение, особенно когда мне нужно объединить мою новую строку.Если кто-нибудь знает, как создать массив символов, я приму любой совет и информацию.
Я уже пытался освободить место в своем стеке и освободить его позже, если понадобится. чтобы объединить мою строку, но это создает большое пустое пространство в моей памяти. И непросто динамически использовать subq ${size_needed}, %rsp для создания локальных переменных при следующем вызове функции. Я не уверен, что это хорошая практика.
Я также уже пробовал объявление .bss, но мне нужно одно объявление по строке, и я считаю, что это очень плохо.

Подробнее здесь: https://stackoverflow.com/questions/791 ... hars-array
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»