Копирование строки - Assembler
Формулировка задачи:
Есть некая функция onLog(char), которая в свою очередь передает параметры другой функции.
Если статично задать msg db "Hello World", 0 то строка передается полностью, а если взять строку из rcx(сюда передается
строка из параметров onLog("Hello world")) то слово обрезается и получается "Hello wo"
Как это можно исправить?В асм всего пару дней..
заранее спасибо за ответы
.const Init dq 140019EA8h Sendmsg dq 140009148h .data? msg db ? .code onLog proc mov rax, [rcx] mov [offset msg], rax xor ecx, ecx call Init mov rcx, rax lea rdx, msg call Sendmsg ret onLog endp end
Решение задачи: «Копирование строки»
textual
Листинг программы
.const Init dq 140019EA8h Printf dq 140009148h .code onLog proc mov rbp, [rcx] xor ecx, ecx call Init mov rcx, rax mov rdx, rbp call Printf ret onLog endp end
Объяснение кода листинга программы
.const - это сегмент, в котором хранятся константы. Init - это функция, которая инициализирует сегмент стека и регистры. Printf - это функция, которая выводит строку на экран. onLog - это процедура, которая вызывает функцию Init, сохраняет в стеке адрес возврата, затем вызывает функцию Printf.
- onLog proc - процедура, которая выполняет действия при вызове.
- mov rbp, [rcx] - перенос в rbp адреса из rcx.
- xor ecx, ecx - обнуление ecx.
- call Init - вызов функции Init.
- mov rcx, rax - перенос в rcx содержимого rax.
- mov rdx, rbp - перенос в rdx содержимого rbp.
- call Printf - вызов функции Printf.
- ret - завершение процедуры.
- onLog endp - завершение определения процедуры.
- end - конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д