IDA.WLL
Ищем строку с именем любой IDC функции (например AskYN) - и видим, что смещение на нее расположено в одном из полей структуры, служащей для bindingа функций во встроенный IDC движок, адрес начала массива таких структур у меня был 0x1008D9C0. Структура имеет три поля - сначала ссылка на строку - имя функции в IDC, затем указатель на функцию, а последнее поле описывает типы аргументов функции. Об этом последнем поле хочется сказать подробнее - оно представляет собой указатель на массив байт. Каждый байт в этом массиве описывает собой один аргумент экспортируемой в IDC функции, значения байт:
- 1 строковый аргумент
- 2 числовой аргумент (long)
- 4 переменное число аргументов, как в функции Message
- 0 означает конец списка описания аргументов.
Для удобства я переименовал с помощью IDC scrpitа rename_f.idc все экспортирумые в IDC функции. Оказалось, что далеко не все функции описаны в idc.idc. Теперь у нас есть полный список всех функций IDC, а также реализации IDC функций с помощью API - уже немало.