Посл.ответ |
Сообщение |
Ранг: 40.9 (посетитель) Активность: 0.02↘0 Статус: Участник diProtector Software
|
Создано: 30 ноября 2005 14:36 · Личное сообщение · #1
Такая проблема - добавляю в новую секцию PE код, в котором используется куча смещений. Есесно все они становятся невалидными. Какие есть техники исправления этого недоразумения?
| Сообщение посчитали полезным: |
|
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 30 ноября 2005 14:56 · Личное сообщение · #2
получить код под нужное смещение или подогнать имеющийся код под необходимое смещение,
т.е. разместить код по родным адресам ;)
| Сообщение посчитали полезным: |
 Ранг: 420.3 (мудрец) Активность: 0.24↘0 Статус: Участник
|
Создано: 30 ноября 2005 16:40 · Поправил: ValdiS · Личное сообщение · #3
Может немного не в тему, но...
PUSH 4
PUSH 1000
PUSH 1000 ; размер области
PUSH 0 ; адрес
CALL kernel32.VirtualAlloc
Почему часто, когда задаешь адрес ручками вроде бы в свободном участке памяти и подходящего размера, VirtualAlloc не отрабатывает? Хотя при параметре 0 винда сама все создает, получается нужный размер, но адресок не подходит. Просто бывает необходимо скопировать сдампленную область по определенному адресу (при исследовании ASPra, например  ), т.е. подогнать имеющийся код под необходимое смещение , но ничего не выходит. Что можно сделать?
----- Сколько ни наталкивали на мысль – все равно сумел увернуться | Сообщение посчитали полезным: |
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 30 ноября 2005 16:52 · Поправил: Asterix · Личное сообщение · #4
ValdiS пишет:
Просто бывает необходимо скопировать сдампленную область по определенному адресу (при исследовании ASPra, например ), т.е. подогнать имеющийся код под необходимое смещение , но ничего не выходит. Что можно сделать?
Прицепить секцию, выставить ей правильные виртуальные смещение и размер
| Сообщение посчитали полезным: |
Ранг: 500.5 (!), 8thx Активность: 0.23↘0 Статус: Участник
|
Создано: 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.23↘0 Статус: Участник
|
Создано: 30 ноября 2005 16:57 · Личное сообщение · #6
Asterix
А как ей выставить правильное смещение если адрес скажем меньше чем ImageBase ?
----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels | Сообщение посчитали полезным: |
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 30 ноября 2005 17:04 · Личное сообщение · #7
Smon пишет:
если адрес скажем меньше чем ImageBase ?
тогда, лови момент когда эта память выделяется(для этого кода) и подправляй адрес на необходимый,
например на тот что имеет добавленная секция, протектор сам код настроит
| Сообщение посчитали полезным: |
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 30 ноября 2005 17:05 · Поправил: Asterix · Личное сообщение · #8
в общем случае нужно смотреть в сторону релоков, или прог в исходниках, меняющих базовый адрес загрузки,
кажется что-то было у y0da или DrGolova
| Сообщение посчитали полезным: |
 Ранг: 420.3 (мудрец) Активность: 0.24↘0 Статус: Участник
|
Создано: 30 ноября 2005 17:08 · Личное сообщение · #9
Asterix пишет:
тогда, лови момент когда эта память выделяется(для этого кода) и подправляй адрес на необходимый
В том то и дело, что прот сам в основном использует нулевой параметр...
----- Сколько ни наталкивали на мысль – все равно сумел увернуться | Сообщение посчитали полезным: |
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 30 ноября 2005 17:28 · Личное сообщение · #10
ValdiS пишет:
В том то и дело, что прот сам в основном использует нулевой параметр...
Ты ставишь бряк на функцию выделяющую память, на конец функции, и потом подправляешь
возвращаемое значение на адрес в твоей прицепленной секции
| Сообщение посчитали полезным: |
 Ранг: 420.3 (мудрец) Активность: 0.24↘0 Статус: Участник
|
Создано: 30 ноября 2005 17:35 · Личное сообщение · #11
Asterix
Огромное спасибо, все гениальное просто!!!  Об этом не думал...
Век живи - век учись... (с)
----- Сколько ни наталкивали на мысль – все равно сумел увернуться | Сообщение посчитали полезным: |
Ранг: 40.9 (посетитель) Активность: 0.02↘0 Статус: Участник diProtector Software
|
Создано: 30 ноября 2005 17:45 · Личное сообщение · #12
Asterix, дело в том, что код и данные в одной куче. интересует именно техника offset-independent кода, в ARM-ах с этим проблем вообще нет )
| Сообщение посчитали полезным: |
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 30 ноября 2005 17:49 · Личное сообщение · #13
Broken Sword
я вообще не пойму что тебе нужно %)
Broken Sword пишет:
Есесно все они становятся невалидными.
прям уж так все, а относительные?
| Сообщение посчитали полезным: |
Ранг: 40.9 (посетитель) Активность: 0.02↘0 Статус: Участник diProtector Software
|
Создано: 01 декабря 2005 15:18 · Личное сообщение · #14
Asterix в том то и дело, что на АРМ-е можно писать код так, чтобі все смещения біли оффсет-независиміми (через PC-relative, командами add/sub reg, pc, #imm), а на x86 в некоторых случаях без относительных никак. (?)
| Сообщение посчитали полезным: |