Сейчас на форуме: bartolomeo, hgdagon (+7 невидимых) |
![]() |
eXeL@B —› Программирование —› Отображение в памяти процесса |
Посл.ответ | Сообщение |
|
Создано: 20 марта 2006 13:18 · Личное сообщение · #1 Вопрос: Есть секция файла ( к примеру секция кода) При считывании её в память ( буфер) - через FileRead или MapViewOfFile - адрес расположения секции далеко не тот, что в оригинале. Есть конечно вариант делать по смещениям - типа: asm mov edi, 0046CA58 - нужное смещение в исполняемом файле mov eax, ImageBase+1000 lea ebx, Buffer mov ecx, ebx sub ecx, eax //смещение add edi,ecx // указатель на 46CA58 но уже в буфере mov [edi],$00000000 //затерли четыре байта по данному адресу в буфере end Так вот, можно ли не париться с относительными смещениями каждый раз ? ![]() ![]() |
|
Создано: 20 марта 2006 14:01 · Личное сообщение · #2 |
|
Создано: 20 марта 2006 23:48 · Личное сообщение · #3 |
|
Создано: 20 марта 2006 23:50 · Личное сообщение · #4 |
|
Создано: 20 марта 2006 23:56 · Личное сообщение · #5 |
|
Создано: 21 марта 2006 02:45 · Личное сообщение · #6 |
|
Создано: 21 марта 2006 06:51 · Личное сообщение · #7 VedrusVedrus пишет: А если по тому адресу уже что-то выполняется, или она заблокирован? Если выполняется в данный момент, то это наш код(если 1 поток), и мы его можем перенести. Если она заблокирована, так разблокировать. Если эти куски читает наша программа, то следовательно мы её можем сделать однопоточной. Ели же это вирус какой-то, который из заржённой проги пытается всё это сделать, то надо,что-то с многопоточностью делать. ![]() |
|
Создано: 21 марта 2006 08:18 · Поправил: Licos · Личное сообщение · #8 asd Я имел в виду чтение буфера в HLL (языке программирования - C+, Delphi). Некоторые секции исполняемых файлов содержат rva указывающие на данные - например директория ресурсов и импорта. Так вот, без расчёта относительных смещений (указанных выше) эти данные в буфере не найти ![]() ![]() ![]() |
|
Создано: 21 марта 2006 11:13 · Личное сообщение · #9 Конечно можно. Заюзай функцию LoadLibraryEx(lpLibFileName,0,DONT_RESOLVE_DLL_REFERENCES ); Она вернет тебе указатель на буфер. Эта функция эмулирует функцию LoadLibrary, только с тем параметром, что я указал управление программе не передается. Т.е. вроде как exe или dll загрузились, но не выполнелись. Очень удобно, когда дельту неохота считать. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 21 марта 2006 12:00 · Поправил: Licos · Личное сообщение · #10 |
![]() |
eXeL@B —› Программирование —› Отображение в памяти процесса |