Посл.ответ |
Сообщение |
Ранг: 40.9 (посетитель) Активность: 0.02↘0 Статус: Участник diProtector Software
|
Создано: 30 ноября 2005 14:36 · Личное сообщение · #1
Такая проблема - добавляю в новую секцию PE код, в котором используется куча смещений. Есесно все они становятся невалидными. Какие есть техники исправления этого недоразумения?
| Сообщение посчитали полезным: |
|
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 30 ноября 2005 14:56 · Личное сообщение · #2
получить код под нужное смещение или подогнать имеющийся код под необходимое смещение,
т.е. разместить код по родным адресам ;)
| Сообщение посчитали полезным: |
![](img/s7.gif) Ранг: 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, например ![](img/smilies/s1.gif) ), т.е. подогнать имеющийся код под необходимое смещение , но ничего не выходит. Что можно сделать?
----- Сколько ни наталкивали на мысль – все равно сумел увернуться | Сообщение посчитали полезным: |
Ранг: 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
потом копируем код в область, важно чтобы область была с тем же адресом, что и в аспре, иначе придется ручками все смещения перетыкать.. ![](img/smilies/s1.gif) (репа мовсб или мовсд)
----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" 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
| Сообщение посчитали полезным: |
![](img/s7.gif) Ранг: 420.3 (мудрец) Активность: 0.24↘0 Статус: Участник
|
Создано: 30 ноября 2005 17:08 · Личное сообщение · #9
Asterix пишет:
тогда, лови момент когда эта память выделяется(для этого кода) и подправляй адрес на необходимый
В том то и дело, что прот сам в основном использует нулевой параметр...
----- Сколько ни наталкивали на мысль – все равно сумел увернуться | Сообщение посчитали полезным: |
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 30 ноября 2005 17:28 · Личное сообщение · #10
ValdiS пишет:
В том то и дело, что прот сам в основном использует нулевой параметр...
Ты ставишь бряк на функцию выделяющую память, на конец функции, и потом подправляешь
возвращаемое значение на адрес в твоей прицепленной секции
| Сообщение посчитали полезным: |
![](img/s7.gif) Ранг: 420.3 (мудрец) Активность: 0.24↘0 Статус: Участник
|
Создано: 30 ноября 2005 17:35 · Личное сообщение · #11
Asterix
Огромное спасибо, все гениальное просто!!! ![](img/smilies/s3.gif) Об этом не думал...
Век живи - век учись... (с)
----- Сколько ни наталкивали на мысль – все равно сумел увернуться | Сообщение посчитали полезным: |
Ранг: 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 в некоторых случаях без относительных никак. (?)
| Сообщение посчитали полезным: |