Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2010, 13:34   #1
Canyon
Новичок
Джуниор
 
Регистрация: 28.02.2010
Сообщений: 2
По умолчанию Перенос кода в памяти

Доброго времени суток у меня вот такой вопрос каким образом можно перенести код программы из одной области оперативной памяти в другую? желательно с простеньким примером зарание спасибо
Canyon вне форума Ответить с цитированием
Старый 28.02.2010, 14:06   #2
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Под Windows(теория):
Файлы, проецируемые в память
Практика:
Инфектор PE-файлов
Там в середине статьи смотри
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 28.02.2010, 17:34   #3
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Canyon Посмотреть сообщение
Доброго времени суток у меня вот такой вопрос каким образом можно перенести код программы из одной области оперативной памяти в другую? желательно с простеньким примером зарание спасибо
не сдержался, но всё таки спрошу: зачем это?
rpy3uH вне форума Ответить с цитированием
Старый 28.02.2010, 18:59   #4
Canyon
Новичок
Джуниор
 
Регистрация: 28.02.2010
Сообщений: 2
По умолчанию

чисто спартиный интирес
Canyon вне форума Ответить с цитированием
Старый 28.02.2010, 20:24   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

если твоя программа не вирус, то нет никакого толка от перемещения кода
вот пример: в начале выделяем память, потом перемещаем код программы в выделенную память, потом прыжок на перемещённый код

Код:
format PE GUI 4.0
entry start

include 'win32a.inc'

section '.code' code readable writeable executable

NEW_ADDRESS = 020000000h

msg  db 'message',0

start:
        invoke VirtualAlloc, NEW_ADDRESS, CODE_END-CODE_FOR_MOVE, MEM_COMMIT+MEM_RESERVE, PAGE_EXECUTE_READWRITE
        mov esi, CODE_FOR_MOVE
        mov edi, NEW_ADDRESS
        mov ecx, CODE_END-CODE_FOR_MOVE
        rep movsb
        jmp NEW_ADDRESS


CODE_FOR_MOVE:
  push 0
  push msg
  push msg
  push 0
  call [MessageBox]

  push 0
  call [ExitProcess]
CODE_END:


section '.relocs' data readable writeable fixups

section '.idata' import data readable writeable

  library kernel,'KERNEL32.DLL',\
          user32, 'USER32.DLL'


  import kernel,\
         ExitProcess,'ExitProcess',\
         VirtualAlloc,'VirtualAlloc'

  import user32,\
         MessageBox,'MessageBoxA'
в данном случае это не важно, но в случае если вместе с кодом перемещаются и данные,то перемещаемый код должен быть базонезависимым.

Последний раз редактировалось rpy3uH; 28.02.2010 в 20:27.
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос кода Builder 6 -->M.V.S. 6.0 bondik C++ Builder 2 29.11.2010 15:49
не хватает памяти Dimarik Общие вопросы C/C++ 5 17.09.2009 00:16
Выделение памяти mutabor Общие вопросы Delphi 8 26.08.2009 18:16
Контроль памяти FW-TOT Помощь студентам 2 15.11.2008 14:04
Выдернуть куски кода из html-кода trafbite Помощь студентам 7 18.08.2007 13:51