Задать вопрос
@armadillo-cld

Не получается взять символ из строки на FASM?

Windows, FASM x86, exe
Есть структура PROCESSENTRY32, я её заполняю через Process32First\Process32Next, и мне нужно получить первый элемент из szExeFile.
Пробую так, но пишет "Operand size not specified":
mov eax, 0
cinvoke printf, pe32.szExeFile[eax]

Что делать? Как быть?
  • Вопрос задан
  • 424 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@armadillo-cld Автор вопроса
Видимо, мне нужно побольше узнать о функциях ассемблера, потому что я ограничиваюсь только lea, mov, jmp, jnz, je, jz, и др.
Про rep movsb, cld не знал, соответственно не смог выполнить это задание.

cld
                        mov ecx,processname_len-1
                        lea esi,[processname+1]
                        lea edi,[processname]
                        mov byte al,[edi]
                        rep movsb
                        mov byte [edi],al


Этот кусок кода сдвигает строку влево на один символ, перемещая первый символ строки на место последнего. Чтобы не сдвигать завершающий строку нуль-терминатор, при определении strlen добавляем минус один. А в ECX помещаем еще на единицу меньше, так как один символ будет обработан отдельно через регистр AL. В приемник загружаем адрес начала строки, а в источник — адрес второго символа (stroka+1). Перед запуском копирования цепочки байтов сохраняем первый символ в AL. После копирования извлекаем его по адресу, содержащемуся в EDI, — это будет уже адрес последнего символа строки
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
А так?
mov eax, 0
lea eax, pe32.szExeFile[eax]
cinvoke printf, eax
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы