December 2024
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
|
12.19.16.9.5 10 Чичкан 3 Шуль, до конца света осталось 1255 дней
Посоветуйте, плз, хороший hex-editor, кто в теме. Мне очень нравится 010 Editor, но пользоваться коммерческим софтом мне не позволяет религия. Я даже уже собрался его клон писать. Нужны, главным образом, бинарные темплейты, дизассемблинг не нужен, я немного не по этой части.
Upd: Ещё неплохо бы, чтобы он при этом непечатные символы отображал в колонке ASCII, а не заменял их на точки, как это делает xxd, например.
аффтар, правда, пизданутое ебанько, но программа хорошая.
хм... скачал, запустил -- упала.
хм. у меня и под вендой, и под лялепсом работала. ну, у тебя есть варианты: забить или отладить. %-)
...а там есть возможность добавлять темплэйты для парсинга файлов произвольного формата? Если есть -- возможно, игра и стоит свеч.
ну... есть, конечно: там исходники дают. %-)

Ну, исходники я сгенерить и сам, типа, могу, для этого чужие исходники сомнительного происхождения не требуются. Но кодить это на C достаточно неэффективно, много лишнего повторяющегося кода, да и перекомпилировать каждый раз надо.
Вот например, в 010 Editor создаёшь новый темплейт, там пишешь набор структур, из которых состоит файл, и оне автоматически заполняются, и сразу становятся доступными для просмотра. Реверс-инжинирить неизвестный формат становится легко и весело. Как-то так:
typedef struct { // bmfh CHAR bfType[2]; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER;
typedef struct { // bmih DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER;
// Define the headers LittleEndian(); SetBackColor( cLtGray ); BITMAPFILEHEADER bmfh; BITMAPINFOHEADER bmih;
// Check for header if( bmfh.bfType != "BM" ) { Warning( "File is not a bitmap. Template stopped." ); return -1; }
кстате, нечно подобное было у SEN под названием stlview или как-то так. потом, вроде, он в hiew что-то такое перетащил. больше, вроде бы, никто такого не делал (из консольных).
впрочем, я обычно пишу скриптец на Lua и slang для реверса.
В общем, решил плагин под vim писать. Тормозной, правда, будет, как и всё, писанное на vim-скрипте, ну что делать.
кстате, в midnight commander есть hex editor, гыгы.
Притом, язык темплэйтов далёк от стандартного C, там возможны такие пассажи:
// Define each line of the image struct BITMAPLINE {
// Define color data if( bmih.biBitCount < 8 ) UBYTE imageData[ bytesPerLine ]; else if( bmih.biBitCount == 8 ) UBYTE colorIndex[ bmih.biWidth ]; else if( bmih.biBitCount == 24 ) RGBTRIPLE colors[ bmih.biWidth ]; else if( bmih.biBitCount == 32 ) RGBQUAD colors[ bmih.biWidth ];
// Pad if necessary if( padding != 0 ) UBYTE padBytes[ padding ];
} lines[ bmih.biHeight ] <optimize=true>;
|