?

Log in

No account? Create an account

Previous Entry | Next Entry

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

С форматом JNX, можно считать, разобрались. Настало время поковырять формат IMG.

Изначально векторный, этот формат был некоторое время назад "прокачан" до поддержки DEM-слоев и спутниковых снимков местности в формате JPEG. В качестве примеров могу привести карты Garmin GB Discoverer (искать на файлопомойках) и свободно доступную карту острова Мэн.

Что известно в интернетах про формат IMG? С одной стороны достаточно много, с другой, бóльшая часть сведений относится к старым вариациям формата. Перечислю основные источники информации об IMG и его составляющих:
Про то, как хранится в IMG растр, в этих документах ни слова. По крайней мере, на момент написания этого текста.

Что ж, это не повод для грусти.
Скачаем карту острова Мэн и распилим её на составляющие GMP-файлы с помощью GMapTool. Будем препарировать самый маленький из составляющих GMP-файлов - 00355951.GMP, размер которого всего-то 3648 байтов. GMapTool любезно сообщает, что в этом файле всего 2 битмапки.

Открываем 00355951.GMP в hex-просмотрщике, вооружаемся всеми имеющимися документами по формату и получаем вот такую длинную таблицу.

Всё более-менее понятно. Бóльшая часть блоков в GMP пуста, часть из непустых уже документирована, часть не меняется (как показывает сравнение с другими GMPшками карты). Осталось понять, что же такое хранится в блоках RGN2 и RGN5 и можно делать собственные растровые карты IMG :)

Длительное созерцание hex-дампа к просветлению не привело. Придется прибегать к хардкору.

Берем известный дизассемблер (желательно версию с декомпилятором и сервером удаленной отладки под яблочную ОСь) и скачиваем BaseCamp под Макось. Почему именно её? Потому что, во-первых, она под нормальный интелловский процессор, а не новомодные труднодекомпилируемые дотнеты, а во-вторых примерно половину бинарника занимают отладочные символы (по крайней мере, в версии 3.1.1 это именно так, про более свежие пока не уточнял).

Закидываем файл на ковыряние в дизассемблер, одновременно либо устанавливаем хакинтош на VirtualBox, либо находим версию на железе. Ставим туда BaseCamp, а заодно и mac_server дизассемблера.

Делаем из нашего маленького GMP карту в формате IMG при помощи опять же GMapTool. Качаем с сайта гармина программку Map Converter, конвертируем в формат, приемлемый для BaseCamp под Мак, и устанавливаем на отладочной машине.

Всё. Теперь можно изучать процесс загрузки карты живьем под отладчиком.

Метки: