|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 6, 2004 19:56:37 есть ли какая-нибудь утилитка для поиска имен констант (из Windows API имею в виду) по их значению ? т.е, так же, как это делает ИДА, только в виде отдельной утилиты, и помощнее... чтобы показывала все константы, значение которых совпадает с запрошенным, например, ввели 111h, прога выдает: WM_COMMAND, ... и т.д. если есть еще. а то замучаешься рыться в .h да в API-Viewer'е от KPDTeam. |
|
|
Дата: Июн 6, 2004 20:08:21 Можно написать самому. На перловом движке. Проходишь через все .h-файлы и выбираешь все #define. Т.к. #define могут быть самые разные, то необходимо тщательно подобрать нужный regex. Например, вот так: /\#define\s+([A-Z_]+)\s+([0-9x]+)/ Потом прицепить к скрипту поддержку какой-нибудь DB типа MySQL и шарашить $1/$2 прямо в базу данных. Т.о. у тя будет все, что тебе нуно для реверсинга :) |
|
|
Дата: Июн 6, 2004 20:14:49 · Поправил: Funbit в MySQL запихать это неплохая идея :) но вот что с такой фигней делать: #define CALG_MD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5) или, что еще хуже: #define GET_CERT_UNICODE_RDN_ERR_INDEX(X) \
((X >> CERT_UNICODE_RDN_ERR_INDEX_SHIFT) & CERT_UNICODE_RDN_ERR_INDEX_MASK)
полный парсер хидеров писать... =\ |
|
|
Дата: Июн 6, 2004 20:20:32 Да, это хуже. Мой вариант возьмет нечто вроде: #define LANG_INDONESIAN 0x21 Для твоих случаев все намного более напряжно. Видимо, имеет смысл написать лишь какой-то частичный вариант. Прогонишь ты, скажем, тем, что я предложил. Вырипаешь примерно 80 %. Если мало будет, то тогда действительно придется писать нечто совсем общее, основанное на конкретном лексическом движке данного компилера. |
|
|
Дата: Июн 6, 2004 21:47:49 а что если попробовать возложить всю эту работу прямо на MSVC :) написать простенький парсер, который будет преобразовывать #define XXX 123 к виду: dwArray[...] = 123, и запоминать имя (т.е. XXX). а потом можно просто пройтись по массиву и взять расчитанные значения :) должно прокатить |
|
|
Дата: Июн 6, 2004 21:50:14 Не очень понял. Ты имеешь в виду ассоциативный массив? Или ты просто хочешь переписать на сях, то, что можно сделать на перле? Ну так ведь и твой вариант не сможет взять тот случай, что ты сам предложил. Необходимо накапливать где-то все имена в #define, чтобы потом можно было это использовать. |
|
|
Дата: Июн 6, 2004 21:57:23 не, я имел в виду, подключить нужный хидер к исходнику, а в исходник вставить этот же хидер, только спарсеный, примерно по такому алгу: o) рассматривать только #define, остальное удалять o) #define XXX (0x123 - WM_HAHA) заменять на dwArray[n] = (0x123 - WM_HAHA) dwArray - это наш массив, в коде. потом, просто откомпилить и собрать значения. т.е. исходник будет генерица небольшой программкой, на перле например |
|
|
Дата: Июн 6, 2004 22:03:19 Мда... То ли ты хреново объясняешь, то ли я плохо соображаю :( Ладно, замнем для ясности. А вообще, как вариант, можно сделать следующее. Создать проект в VS. Влючить туда ВСЕ хедеры. Прогнать через препроцессор, а потом через специальную перловую программу. И все. |
|
|
Дата: Июн 6, 2004 22:05:34 · Поправил: Funbit жаль все-таки, что мой вариант остался непонятным :( ладно, сейчас посмотрю, будет ли он работать |
|
|
Дата: Июн 6, 2004 22:50:49 volodya Видимо, имеет смысл написать лишь какой-то частичный вариант. Прогонишь ты, скажем, тем, что я предложил. Вырипаешь примерно 80 %. А оставшиеся 20% define'ов, которые имеют более сложную структуру, кидать в лог-файл, чтоб потом их можно было вручную отресолвить и добавить в базу. Это вариант мне кажется самым приемлемым, но не самым Дзенным :-) Кстати, #define ещё используется и для макросов. Такие дэфайны надо отсеить. Funbit Взять книжку Красного Дракона и написать простенький препроцессор (таблица символов + парсер мат. операторов). |
|
|
Дата: Июн 6, 2004 23:00:14 · Поправил: Funbit Quantum свой препроцессор это конечно гибко, мощно и удобно... но я думаю все же попроще это дело сделать, оставить из всех хидеров только #define (может быть максоры отсеить). потом написать скрипт, который сгенерит исходник, состоящий из строк: DWORD dwArray[кол_во_найденных_define]; dwArray[0] = то_что_было_у_первого_define; dwArray[1] = то_что_было_у_второго_define; и т.п. потом пройтись по этому массиву и взять готовые вычисленные значения :) |
|
|
Дата: Июн 6, 2004 23:08:53 Funbit Теперь понял :-) |
|
|
Дата: Июн 7, 2004 00:13:29 Теперь и я понял. Но я по прежнему думаю, что и вариант с MySQL отнюдь не самый пропащий :) |
|
|
Дата: Июн 7, 2004 00:30:48 volodya так его никто не отменял :) то что я собираюсь делать только лишь промежуточное дело... потом в mysql. надеюсь найду время все это сделать |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.174 |