![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
1) Можно ли в С++ (msvc2008) узнать размер и VA секции кода на этапе компиляции
2) Есть модуль с функциями, можно ли на этапе компиляции узнать адреса функций с наименьшим и с наибольшим адресами в исполняемом модуле? и вообще, можно ли както отслеживать\влиять на на размещение функций в секции кода, есть ли какие то правила по которым компилятор их размещает? Это сообщение отредактировал(а) GoldFinch - 1.12.2008, 21:50 |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: -1 Всего: 14 |
смотри #pragma там что-то есть
и в параметрах компилятора/линкера тоже вроде что-то было Это сообщение отредактировал(а) J0ker - 30.11.2008, 21:42 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
и как это соотносится с "узнать на этапе компиляции" ?
мне надо параметры в функцию передать, типа Func(CodeSectionVA,CodeSectionSize) |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: -1 Всего: 14 |
pragma позволяет разместить код в определенной секции
на этапе компиляции адрес функции узнать нельзя, т.к он будет известен только на этапе линковки. так-же на этапе компиляции нельзя узнать размер секции - он будет вычеслен на этапе линковки для решения подобной задачи вам надо разобраться с форматом PE и парсать файл либо его отображение в памяти |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
нда.... яву есть яву... этапы компиляции... этапы линковки... понакрутили _всякого_
впринципе можно 1 раз вбить константой расположение PE-заголовка и брать rva и filesize 1й секции. способ кривоват малость, минусы присутствуют, но для большинства случаев покатит я так понимаю в msvc2008 нельзя получить\повлиять_на расположение PE заголовка? развечто стаб указать линкеру - так этот стаб еще и вместе с проектом таскать надо значит надо либо компилить одним и тем же линкером, чтоб размер стаба забитый в код не менялся, либо получать смещение PE-заголовка динамически |
|||
|
||||
| GremlinProg |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
можно хоть в шестой версии: 1. пишешь эксплоит, который извлекает VA из образа, 2. открываешь свойства проекта: PreLink-Post Build, размещаешь тут вызов на свой эксплоит, передаешь ему имя файла образа 3. теперь при компиляции проекта, этот эксплоит будет поставлять в проект необходимую тебе информацию, для которой ты его и написал
обмен данными между эксплоитом и программой осуществляешь через файл образа, т.е. зашиваешь эти адреса в какие-нить статические переменные
по той-же схеме, узнать можно все, что тебе требуется
компоновщик может только выровнять сегменты кода, а вот поменять местами, отсортировать - это уже внешнее воздействие на секции в объектных файлах, если знаком с COFF форматом, то понимаешь, что секции можно двигать в любом направлении. вобщем-то, из всего, что я сейчас написал, "на этапе компиляции" возможным будет только модификация расположения секций и поиск VA через эксплоит, а остальное - получение VA через стат. переменные - это уже всетаки ран-тайм Добавлено через 10 минут и 46 секунд я тут немножко перемешал PE и COFF, поэтому для ясности: COFF сформирован на этапе PreBuild PE сформирован на этапе PostBuild на этапе PreLink, еще ничего не сформировано поэтому, можно на этапе компиляции вклиниться в процесс сборки, например, если перехватить PreBuild и модифицировать какой-нибудь COFF, то на этапе PostBuild эти изменения уже будут включены в образ в COFF обычно каждая функция имеет свою секцию, либо, по крайней мере, уникальный FPO, поэтому я и объединил понятия функция и секция, т.е. перемещение этих секций в COFF отразится на расположении в образе -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||||
|
|||||||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: -1 Всего: 14 |
GremlinProg, слишком сложно
все VA можно извлечь непосредственно в программе - ничего вызывать не надо - хэндл возвращаемый GetModuleHandle(NULL) численно равен абсолютному адресу расположения отображения файла - далее парсаем и получаем все что нужно |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
естественно, HMODULE - указатель на образ в памяти,
вопрос-то стоит иначе:
отсюда и ответ -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
GremlinProg, все это хорошо, только мне при расшаривании кода к нему сплоет цеплять?
------------------------- По теме: rva 1й секции = 0x1000, его определять не нада |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
вообще-то, это на самом деле, довольно сложное решение, J0ker, в этом плане прав, но сам механизм воздействия на PE на этапе компиляции очень удобный и логичный, потому что позволяет писать по-сути любые языковые расширения.
я, честно говоря, сам не пробовал искать, но вполне возможно, что масса такого рода экспплоитов уже давным давно бродит по просторам инета, в ожидании, что их наконец-то найдут, технология-то очень старая (в смысле еще в 6 версии это уже можно было делать) вот с этой точки зрения, вполне логично использовать какой-нить уже готовый эксплоит, делов-то - только прописать параметры его запуска и в нашем любимом C/С++ появляется набор каких-нить высокоуровневых инструментов над COFF и/или PE (каких- не знаю, сейчас фантазия выключена, но, по крайней мере, можно значительно расширить к примеру __declspec, который, на самом деле, соответствует спецификации только по нескольким пунктам) не понял, что значит расшарить код? кому расшарить? -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
GremlinProg, расшарить - это от слова share, т.е. поделиться с народом.
если кому интересно, то получилось вот так:
|
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
не вижу логики, ты же не задаешься вопросом как тебе расшаривать инструменты MSVC стоит у каждого, кто принимает участие в разработке эксплоит - тот же инструмент и так же инсталируется на месте -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
так или иначе, разработка дополнения к компилятору для решения подобной задачи, не соответствует масштабу самой задачи.
кроме того, это дополнение к компилятору будет работать только под конкретную версию конкретного компилятора, что весьма неинтересно. проще тогда уж обрабатывать получившийся PE-файл отдельной прогой. |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
) я просто выделил самые пустые заявления
на форуме, обычно, если человек чего-то не понимает, он всегда может задать уточняющий вопрос я просто предлагаю тебе сейчас проработать материал, о котором ты, исходя из последних постов, пока либо ничего не знаешь, либо вообще не понимаешь о чем я пишу и боишься элементарно спросить давай разбираться с самого начала, просто спрашивай, какое слово непонятно -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
GremlinProg, поясни что подразумеваешь под словом "эксплоит"
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |