Есть ли такая утилита, как dspcat в Linux?

9

Я использую следующую dspcatкоманду в AIX и могу создавать каталоги сообщений, созданные с помощью этой gencatкоманды:

dspcat –g  /u/is/bin/I18N/l/lib/libca/libcalifornia.117.cat >> /tmp/message.smc

Я потратил много времени на поиски советов о том, как вывести один из этих каталогов в Linux, но эта команда, по-видимому, недоступна. Любая помощь будет оценена.

ojblass
источник
Я тоже не вижу там много. Будет ли stringsкоманда достаточно, чтобы получить то, что вам нужно? Может быть, с небольшой пост-обработкой?
Шон Перри
строки, скорее всего, закодированы ... я не совсем уверен, правильно ли выпала бы строка shiftjis из строкового файла каталога ... Я могу попробовать кое-что проверить.
ojblass
Формат, вероятно, не слишком сложен для обратного инжиниринга, если содержание является ценным.
Шон Перри

Ответы:

3

Я нашел исходный код для dspcat.c: http://www.smart.net/~rlhamil/ . Конкретно в этом тарболе . Я попытался скомпилировать его и пропустил переменную:

$ make
cc -O -DSOLARIS    dspcat.c   -o dspcat
dspcat.c: In function ‘format_msg’:
dspcat.c:11:23: error: ‘NL_TEXTMAX’ undeclared (first use in this function)
    static char result[NL_TEXTMAX*2+1];
                       ^
dspcat.c:11:23: note: each undeclared identifier is reported only once for each function it appears in
dspcat.c: In function ‘print_file’:
dspcat.c:240:23: error: ‘NL_SETMAX’ undeclared (first use in this function)
    int setlo=1, sethi=NL_SETMAX, msglo=1, msghi=NL_MSGMAX, x, y;
                       ^
dspcat.c:240:49: error: ‘NL_MSGMAX’ undeclared (first use in this function)
    int setlo=1, sethi=NL_SETMAX, msglo=1, msghi=NL_MSGMAX, x, y;
                                                 ^
dspcat.c: In function ‘main’:
dspcat.c:338:30: error: ‘NL_MSGMAX’ undeclared (first use in this function)
       if (msg_nr<1 || msg_nr>NL_MSGMAX) {
                              ^
dspcat.c:353:32: error: ‘NL_SETMAX’ undeclared (first use in this function)
       if (msg_set<1 || msg_set>NL_SETMAX) {
                                ^
make: *** [dspcat] Error 1

NL_SETMAXКажется, переменная не определена в моей системе. Я нашел этот заголовочный файл, bits/xopen_lim.hкоторый имел эту переменную, поэтому я добавил это в список заголовков по своей прихоти.

$ make
cc -O -DSOLARIS    dspcat.c   -o dspcat
dspcat.c: In function ‘format_msg’:
dspcat.c:11:33: warning: integer overflow in expression [-Woverflow]
    static char result[NL_TEXTMAX*2+1];
                                 ^
dspcat.c:11:16: error: size of array ‘result’ is negative
    static char result[NL_TEXTMAX*2+1];
                ^
dspcat.c:11:16: error: storage size of ‘result’ isn’t constant
dspcat.c:15:29: warning: integer overflow in expression [-Woverflow]
    for (x=0; x < (NL_TEXTMAX*2) && *s != '\0'; s++)
                             ^
make: *** [dspcat] Error 1

Если у меня будет больше времени, я поиграю с этим, но я верю, что если вы статически устанавливаете эту переменную в коде напрямую, вы можете скомпилировать это самостоятельно.

SLM
источник
Я могу работать с этим большое спасибо +50
ojblass