Сейчас на форуме: YDS, _MBK_, user99 (+5 невидимых)

 eXeL@B —› Основной форум —› Правка смещений после добавления кода в новую секцию
Посл.ответ Сообщение

Ранг: 40.9 (посетитель)
Активность: 0.020
Статус: Участник
diProtector Software

Создано: 30 ноября 2005 14:36
· Личное сообщение · #1

Такая проблема - добавляю в новую секцию PE код, в котором используется куча смещений. Есесно все они становятся невалидными. Какие есть техники исправления этого недоразумения?



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 30 ноября 2005 14:56
· Личное сообщение · #2

получить код под нужное смещение или подогнать имеющийся код под необходимое смещение,
т.е. разместить код по родным адресам ;)




Ранг: 420.3 (мудрец)
Активность: 0.240
Статус: Участник

Создано: 30 ноября 2005 16:40 · Поправил: ValdiS
· Личное сообщение · #3

Может немного не в тему, но...
PUSH 4
PUSH 1000
PUSH 1000 ; размер области
PUSH 0 ; адрес
CALL kernel32.VirtualAlloc

Почему часто, когда задаешь адрес ручками вроде бы в свободном участке памяти и подходящего размера, VirtualAlloc не отрабатывает? Хотя при параметре 0 винда сама все создает, получается нужный размер, но адресок не подходит. Просто бывает необходимо скопировать сдампленную область по определенному адресу (при исследовании ASPra, например ), т.е. подогнать имеющийся код под необходимое смещение , но ничего не выходит. Что можно сделать?

-----
Сколько ни наталкивали на мысль – все равно сумел увернуться




Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 30 ноября 2005 16:52 · Поправил: Asterix
· Личное сообщение · #4

ValdiS пишет:
Просто бывает необходимо скопировать сдампленную область по определенному адресу (при исследовании ASPra, например ), т.е. подогнать имеющийся код под необходимое смещение , но ничего не выходит. Что можно сделать?


Прицепить секцию, выставить ей правильные виртуальные смещение и размер



Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 30 ноября 2005 16:56 · Поправил: Smon
· Личное сообщение · #5

ValdiS
Я делал так:
push 4
push 3000
push 1000 - вроде как меньше не бывает, т.к. размер страницы - 1000, или 4кб
push 0C000000 - адрес области
call VirtualAlloc

потом копируем код в область, важно чтобы область была с тем же адресом, что и в аспре, иначе придется ручками все смещения перетыкать.. (репа мовсб или мовсд)

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels




Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 30 ноября 2005 16:57
· Личное сообщение · #6

Asterix
А как ей выставить правильное смещение если адрес скажем меньше чем ImageBase ?

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels




Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 30 ноября 2005 17:04
· Личное сообщение · #7

Smon пишет:
если адрес скажем меньше чем ImageBase ?


тогда, лови момент когда эта память выделяется(для этого кода) и подправляй адрес на необходимый,
например на тот что имеет добавленная секция, протектор сам код настроит



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 30 ноября 2005 17:05 · Поправил: Asterix
· Личное сообщение · #8

в общем случае нужно смотреть в сторону релоков, или прог в исходниках, меняющих базовый адрес загрузки,
кажется что-то было у y0da или DrGolova




Ранг: 420.3 (мудрец)
Активность: 0.240
Статус: Участник

Создано: 30 ноября 2005 17:08
· Личное сообщение · #9

Asterix пишет:
тогда, лови момент когда эта память выделяется(для этого кода) и подправляй адрес на необходимый

В том то и дело, что прот сам в основном использует нулевой параметр...

-----
Сколько ни наталкивали на мысль – все равно сумел увернуться




Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 30 ноября 2005 17:28
· Личное сообщение · #10

ValdiS пишет:
В том то и дело, что прот сам в основном использует нулевой параметр...

Ты ставишь бряк на функцию выделяющую память, на конец функции, и потом подправляешь
возвращаемое значение на адрес в твоей прицепленной секции




Ранг: 420.3 (мудрец)
Активность: 0.240
Статус: Участник

Создано: 30 ноября 2005 17:35
· Личное сообщение · #11

Asterix
Огромное спасибо, все гениальное просто!!! Об этом не думал...
Век живи - век учись... (с)

-----
Сколько ни наталкивали на мысль – все равно сумел увернуться




Ранг: 40.9 (посетитель)
Активность: 0.020
Статус: Участник
diProtector Software

Создано: 30 ноября 2005 17:45
· Личное сообщение · #12

Asterix, дело в том, что код и данные в одной куче. интересует именно техника offset-independent кода, в ARM-ах с этим проблем вообще нет )



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 30 ноября 2005 17:49
· Личное сообщение · #13

Broken Sword
я вообще не пойму что тебе нужно %)

Broken Sword пишет:
Есесно все они становятся невалидными.


прям уж так все, а относительные?



Ранг: 40.9 (посетитель)
Активность: 0.020
Статус: Участник
diProtector Software

Создано: 01 декабря 2005 15:18
· Личное сообщение · #14

Asterix в том то и дело, что на АРМ-е можно писать код так, чтобі все смещения біли оффсет-независиміми (через PC-relative, командами add/sub reg, pc, #imm), а на x86 в некоторых случаях без относительных никак. (?)


 eXeL@B —› Основной форум —› Правка смещений после добавления кода в новую секцию
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати