Манипулирование строками в сборке (MASM) - PullRequest
1 голос
/ 29 июня 2011
.data
    source  BYTE  "Defense mechanism",0
    target  BYTE  SIZEOF source DUP(0)

.code
    main PROC

        mov  esi, OFFSET target
        mov  edi, OFFSET target
        mov  ecx, SIZEOF source
    L1:
        mov  al,[esi]           ; get a character from source
        mov  [edi],al           ; store it in the target
        inc  esi                ; move to next character
        inc  edi
        loop L1

В разделе .data я вижу, что source определяется как строка. В разделе .code я вижу, что ячейка памяти target хранится в исходном индексе. Разве я не хочу, чтобы исходный индекс (ESI) указывал на source вместо target? Предполагается, что эта программа скопирует в целевое поле строку, инициализированную по размеру исходной строки, и каждое из полей будет заполнено нулями. У меня нет опыта работы с языком ассемблера. Что я делаю не так? (Примечание: это то, как мой профессор перечислил программу, но он не предлагает никаких реальных материалов по этому вопросу, потому что это веб-курс "Безопасность в вычислениях".

1 Ответ

2 голосов
/ 29 июня 2011

Да, вы правы - esi должен указывать на source, а не target - похоже, у вашего профессора есть хотя бы одна ошибка в этом коде. Изменения:

          mov  esi, OFFSET target

до:

          mov  esi, OFFSET source
...