Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> размер и размещение кода 
V
    Опции темы
GoldFinch
Дата 30.11.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



1) Можно ли в С++ (msvc2008) узнать размер и VA секции кода на этапе компиляции
2) Есть модуль с функциями, можно ли на этапе компиляции узнать адреса функций с наименьшим и с наибольшим адресами в исполняемом модуле? 
и вообще, можно ли както отслеживать\влиять на на размещение функций в секции кода, есть ли какие то правила по которым компилятор их размещает?

Это сообщение отредактировал(а) GoldFinch - 1.12.2008, 21:50
PM MAIL ICQ   Вверх
J0ker
Дата 30.11.2008, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: -1
Всего: 14



смотри #pragma там что-то есть
и в параметрах компилятора/линкера тоже вроде что-то было

Это сообщение отредактировал(а) J0ker - 30.11.2008, 21:42


--------------------
user posted image
PM MAIL   Вверх
GoldFinch
Дата 30.11.2008, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



и как это соотносится с "узнать на этапе компиляции" ?
мне надо параметры в функцию передать, типа
Func(CodeSectionVA,CodeSectionSize)
PM MAIL ICQ   Вверх
J0ker
Дата 1.12.2008, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: -1
Всего: 14



pragma позволяет разместить код в определенной секции
на этапе компиляции адрес функции узнать нельзя, т.к он будет известен только на этапе линковки.
так-же на этапе компиляции нельзя узнать размер секции - он будет вычеслен на этапе линковки
для решения подобной задачи вам надо разобраться с форматом PE и парсать файл либо его отображение в памяти



--------------------
user posted image
PM MAIL   Вверх
GoldFinch
Дата 1.12.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



нда.... яву есть яву... этапы компиляции... этапы линковки... понакрутили _всякого_
впринципе можно 1 раз вбить константой расположение PE-заголовка и брать rva и filesize 1й секции.
способ кривоват малость, минусы присутствуют, но для большинства случаев покатит 

я так понимаю в msvc2008 нельзя получить\повлиять_на расположение PE заголовка? развечто стаб указать линкеру - так этот стаб еще и вместе с проектом таскать надо
значит надо либо компилить одним и тем же линкером, чтоб размер стаба забитый в код не менялся, либо получать смещение PE-заголовка динамически
PM MAIL ICQ   Вверх
GremlinProg
Дата 1.12.2008, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(GoldFinch @  30.11.2008,  23:28 Найти цитируемый пост)
Можно ли в С++ (msvc2009) узнать размер и VA секции кода на этапе компиляции

можно хоть в шестой версии:
1. пишешь эксплоит, который извлекает VA из образа,
2. открываешь свойства проекта: PreLink-Post Build, размещаешь тут вызов на свой эксплоит, передаешь ему имя файла образа
3. теперь при компиляции проекта, этот эксплоит будет поставлять в проект необходимую тебе информацию, для которой ты его и написал

Цитата(GoldFinch @  30.11.2008,  23:46 Найти цитируемый пост)
мне надо параметры в функцию передать, типаFunc(CodeSectionVA,CodeSectionSize)

обмен данными между эксплоитом и программой осуществляешь через файл образа, т.е. зашиваешь эти адреса в какие-нить статические переменные

Цитата(GoldFinch @  30.11.2008,  23:28 Найти цитируемый пост)
можно ли на этапе компиляции узнать адреса функций с наименьшим и с наибольшим адресами в исполняемом модуле

по той-же схеме, узнать можно все, что тебе требуется
Цитата(GoldFinch @  30.11.2008,  23:28 Найти цитируемый пост)
можно ли както отслеживать\влиять на на размещение функций в секции кода

компоновщик может только выровнять сегменты кода, а вот поменять местами, отсортировать - это уже внешнее воздействие на секции в объектных файлах, если знаком с COFF форматом, то понимаешь, что секции можно двигать в любом направлении.

вобщем-то, из всего, что я сейчас написал, "на этапе компиляции" возможным будет только модификация расположения секций и поиск VA через эксплоит, а остальное - получение VA через стат. переменные - это уже всетаки ран-тайм

Добавлено через 10 минут и 46 секунд
я тут немножко перемешал PE и COFF, поэтому для ясности:
COFF сформирован на этапе PreBuild
PE сформирован на этапе PostBuild
на этапе PreLink, еще ничего не сформировано

поэтому, можно на этапе компиляции вклиниться в процесс сборки, например, если перехватить PreBuild и модифицировать какой-нибудь COFF, то на этапе PostBuild эти изменения уже будут включены в образ

в COFF обычно каждая функция имеет свою секцию, либо, по крайней мере, уникальный FPO, поэтому я и объединил понятия функция и секция, т.е. перемещение этих секций в COFF отразится на расположении в образе



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
J0ker
Дата 1.12.2008, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: -1
Всего: 14



GremlinProg, слишком сложно
все VA можно извлечь непосредственно в программе - ничего вызывать не надо - хэндл возвращаемый GetModuleHandle(NULL) численно равен абсолютному адресу расположения отображения файла - далее парсаем и получаем все что нужно


--------------------
user posted image
PM MAIL   Вверх
GremlinProg
Дата 1.12.2008, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



естественно, HMODULE - указатель на образ в памяти, 
вопрос-то стоит иначе:
Цитата(GoldFinch @  30.11.2008,  23:28 Найти цитируемый пост)
Можно ли в С++ (msvc2009) узнать размер и VA секции кода на этапе компиляции

отсюда и ответ


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GoldFinch
Дата 1.12.2008, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



GremlinProg, все это хорошо, только мне при расшаривании кода к нему сплоет цеплять?


-------------------------
По теме: rva 1й секции = 0x1000, его определять не нада
PM MAIL ICQ   Вверх
GremlinProg
Дата 1.12.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



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

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

вот с этой точки зрения, вполне логично использовать какой-нить уже готовый эксплоит, делов-то - только прописать параметры его запуска и в нашем любимом C/С++ появляется набор каких-нить высокоуровневых инструментов над COFF и/или PE (каких- не знаю, сейчас фантазия выключена, но, по крайней мере, можно значительно расширить к примеру __declspec, который, на самом деле, соответствует спецификации только по нескольким пунктам)


Цитата(GoldFinch @  1.12.2008,  23:04 Найти цитируемый пост)
мне при расшаривании кода к нему сплоет цеплять?

не понял, что значит расшарить код? кому расшарить?


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GoldFinch
Дата 1.12.2008, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



GremlinProg, расшарить - это от слова share, т.е. поделиться с народом.

если кому интересно, то получилось вот так:
Код

BOOL WINAPI DllMain(HMODULE hModule, ...
    ...
    DWORD OldProt;
    int FirstSectionSize =*(int*)((char*)hModule+*(int*)((char*)hModule+0x3C)+0x18+0xE0+0x10);
    VirtualProtect((char*)hModule+0x1000,FirstSectionSize,PAGE_EXECUTE_READWRITE,&OldProt);
    ...

PM MAIL ICQ   Вверх
GremlinProg
Дата 1.12.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(GoldFinch @  1.12.2008,  23:20 Найти цитируемый пост)
расшарить - это от слова share, т.е. поделиться с народом

не вижу логики, ты же не задаешься вопросом как тебе расшаривать инструменты
MSVC стоит у каждого, кто принимает участие в разработке
эксплоит - тот же инструмент и так же инсталируется на месте


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GoldFinch
Дата 1.12.2008, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



так или иначе, разработка дополнения к компилятору для решения подобной задачи, не соответствует масштабу самой задачи.
кроме того, это дополнение к компилятору будет работать только под конкретную версию конкретного компилятора, что весьма неинтересно. проще тогда уж обрабатывать получившийся PE-файл отдельной прогой.
PM MAIL ICQ   Вверх
GremlinProg
Дата 1.12.2008, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



) я просто выделил самые пустые заявления
Цитата(GoldFinch @  1.12.2008,  23:57 Найти цитируемый пост)
дополнение к компилятору

Цитата(GoldFinch @  1.12.2008,  23:57 Найти цитируемый пост)
будет работать только под конкретную версию конкретного компилятора

Цитата(GoldFinch @  1.12.2008,  23:57 Найти цитируемый пост)
проще тогда уж обрабатывать получившийся PE-файл отдельной прогой

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

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

давай разбираться с самого начала, просто спрашивай, какое слово непонятно


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GoldFinch
Дата 2.12.2008, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



GremlinProg, поясни что подразумеваешь под словом "эксплоит"
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.