PE: Экспорт только по ординалу

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
BP
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 17.02.2004 (Вт) 5:34
Откуда: Украина

PE: Экспорт только по ординалу

Сообщение BP » 23.08.2004 (Пн) 22:16

Маюсь вот со списком экспортируемых функций в PE-файле?
Если функция экспортируется и по имени и по ординалу, то всё нормально.
А вот если только по ординалу, вот тут и начинается билиберда.

Я проверял на файле wsock32.dll
Всего там экспортируется 1142 функции. Из них по имени - 81.
Допустим идёт нормально:
Ординал Имя RVA
22 shutdown 179E
23 socket 1145

А потом начинаются шифры, которые в мануалах, имеющихся у меня, не описаны.
Ординал Имя(RVA) RVA
21336 65668212 Overflow

База ординала = 1. Значит наибольший ординал может быть 1142. А тут аж 21336.
RVA имени не входит ни в одну из секций.

Подозреваю что тут какая то хитрая формула. Какая не подскажете?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.08.2004 (Пн) 22:36

Имхо это "фальшивые" экспорты, т.е. функций за ними нет. По крайней мере, Depends и Dumppe их не показывают вовсе.

Проверь на Shell32.dll - там много "настоящих" экспортов по ординалу.

BP
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 17.02.2004 (Вт) 5:34
Откуда: Украина

Сообщение BP » 23.08.2004 (Пн) 23:04

А PE Explorer почему то показывает.
Shell32.dll посмотрел. Показывает тоже самое что и wsock32.dll

У Hard Wisdom вообще про это ничего нет. Iczelion говорит что определить это довольно сложно и больше ни слова. И в примере он их не обрабатывает. Мне бы хоть приблизительно что там нужно делать. А дальше я уж сам как нибудь.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 31.08.2004 (Вт) 22:17

Тебе ещё интересно? Я разобрался, но если и ты уже разобрался, то печатать лень...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 31.08.2004 (Вт) 22:17

Тебе ещё интересно? Я разобрался, но если и ты уже разобрался, то печатать лень...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.08.2004 (Вт) 22:18

Мне ещё интересно :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 31.08.2004 (Вт) 22:19

Ну ё-моё, хотел удалить дуп, а ты уже ответил... Как нехорошо!

Вот, короче. Там три параллельных массива - Ordinal(1 To N), Address(1 To N), Name(1 To K), N - число экспортов, K - число экспортов по имени, оба лежат в заголовке.
У первых K экспортов данные соответственно лежат в этих трёх массивах, с одним и тем же индексом. Имена упорядочены по алфавиту, Ordinal(K) соответствует ординалу самого последнего по алфавиту экспорта.
Начиная с K + 1, в массивах Ordinal и Address идут данные о безымянных экспортах, вроде бы по ординалу, но может быть и в беспорядке. В массиве Name, естественно, начиная с K + 1 лежит беспорядочный шум, который так напугал BP :-)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.08.2004 (Вт) 22:46

Ага, это ясно :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

BP
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 17.02.2004 (Вт) 5:34
Откуда: Украина

Сообщение BP » 04.09.2004 (Сб) 1:18

У первых K экспортов данные соответственно лежат в этих трёх массивах, с одним и тем же индексом

Хм, у меня несколько другая информация.

Условие:
Ordinal(1 To N), Address(1 To N), Name(1 To K), N - число экспортов, K - число экспортов по имени

Я по поводу получения RVA начала функции.
Вот так я делаю:
A=Ordinal(1 To N), тогда адрес будет Address(A). Т.е. полученное значение ординала будет индексом в массиве адресов. Я сверял с имеющимеся у меня PE-вьюверами. Показывают тоже самое.

---

Начиная с K + 1, в массивах Ordinal и Address идут данные о безымянных экспортах, вроде бы по ординалу, но может быть и в беспорядке

Блин, видел бы ты сколько там мусора. Некоторые ординалы повторяются несколько раз. А в wsok32.dll вообще в конце несколько десятков значений ординала - единица. Ну и как прикажете это отсеивать?

===

Я вот хочу на форуме PowerBasic.com спросить. Но моего английского для этого не достаточно. Может кто поможет оформить вопрос?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 27

    TopList