Сделать копирование памяти - Assembler
Формулировка задачи:
Есть код
Надо перемести блок который тут обрабатывается по адресу [newmem+32+x] - где x число проходов на c++ я сделал бы это так(мои объяснения корявы так что может вам поможет пример на другом языке):
newmem: mov cl,[eax] add eax,01 test cl, cl jne "psbfile.dll"+413F
char *eax; char *newmem; char cl; int counter = 0; do { cl = eax[counter] counter++; } while(cl != 0) newmem = new char[counter]; for (int i = 0; i < counter; i++) { newmem[i] = eax[i]; }
Решение задачи: «Сделать копирование памяти»
textual
Листинг программы
char * oldM; char * newM; int main() { while (*newM++ = *oldM++); }
Объяснение кода листинга программы
- Объявлены две переменные типа char*: oldM и newM.
- oldM указывает на начальный адрес памяти, которую необходимо скопировать.
- newM указывает на адрес памяти, куда будет скопирована информация.
- В функции main() происходит цикл while, который выполняется до тех пор, пока не будет выполнено условие (newM++ = oldM++).
- Внутри цикла while происходит инкремент указателей oldM и newM на 1 байт каждый.
- Значение oldM[0] копируется в newM[0], затем oldM[1] копируется в newM[1] и так далее до тех пор, пока не будет выполнено условие (newM++ = oldM++).
- Копирование происходит до тех пор, пока не будет достигнут конец строки (или другого типа данных), после чего выполнение цикла прекращается.
- Результатом работы программы является скопированная память, начиная с адреса oldM и заканчивая адресом newM.