Преобразование образов NRG в ISO

Быстрый способ преобразования NRG-файла в ISO

Позавчера возникла проблема: нужно было срочно переставить Windows XP (ибо VMWare так больно упала, что Windows пал смертью храбрых). Всё хорошо, но вот родного инсталляционного диска под рукой не было, а инсталлятор жил на NTFS-разделе (кстати, DOS-драйвер для чтения NTFS почему-то оказался бессильным). По счастью, на FAT32-диске нашелся образ загрузочного диска. Одна проблема: образ был [...]

← Вернуться к полной версии записи «Преобразование образов NRG в ISO»…

Автор: ; опубликовано в: C/C++; метки: convert, ISO, Nero, NRG, nrg2iso, преобразование
28
Мар
2008

RSS Комментарии к статье «Преобразование образов NRG в ISO» (3)  »

  1. murder

    Этот код

    [-]
    View Code C
        if (0x3552454Eul == id[0]) {    /* Nero v2 footer */
            id[1] = ((id[1] & 0x000000FF) << 24) |
                    ((id[1] & 0x0000FF00) << 8) |
                    ((id[1] & 0x00FF0000) >> 8) |
                    ((id[1] & 0xFF000000) >> 24);

            id[2] = ((id[2] & 0x000000FF) << 24) |
                    ((id[2] & 0x0000FF00) << 8) |
                    ((id[2] & 0x00FF0000) >> 8) |
                    ((id[2] & 0xFF000000) >> 24);

            bytes_to_copy = id[2] | ((uint64_t)(id[1]) << 32);
        }
        else if (0x4F52454E == id[1]) { /* Nero v1 footer */
            bytes_to_copy = id[2];
            bytes_to_copy = ((bytes_to_copy & 0x000000FF) << 24) |
                            ((bytes_to_copy & 0x0000FF00) << 8) |
                            ((bytes_to_copy & 0x00FF0000) >> 8) |
                            ((bytes_to_copy & 0xFF000000) >> 24);
        }

    На ассемблере выглядит изящнее

    [-]
    View Code ASM
    cmp   dword[id],03552454h
    jne   @else
    mov   eax,dword[id+4]
    bswap eax
    mov   dword[bytes_to_copy+4],eax
    mov   eax,dword[id+8]
    bswap eax
    mov   dword[bytes_to_copy],eax
    jmp   @end
    @else:
    cmp   dword[id+4],04F52454Eh
    jne   @end
    mov   eax,dword[id+8]
    bswap eax
    mov   dword[bytes_to_copy],eax
    mov   dword[bytes_to_copy+4],0
    @end:
    • Возможно, что изящнее, но не факт, что оптимальнее — во-первых, Вы привязались к 32-битной архитектуре, во-вторых, не учитываете особенности планирования инструкций.

      Я бы сделал так:

      [-]
      View Code ASM
      mov eax, [id]
      mov edx, [id+4]
      cmp eax, 03552454h
      jne @@v1
      bswap edx
      jmp @@done
      @v1:
      mov eax, edx
      cmp edx, 04F52454Eh
      jne @@fail
      xor edx, edx
      @@done:
      bswap eax
      ; ...
      @@fail:
      ; ...

      Так будет короче :-)

  2. ВаСёК

    Автору пять с плюсом! Спасибо!

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

Оставить комментарий к записи «Преобразование образов NRG в ISO»

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя

गते गते पारगते पारसंगते बोधि स्वाहा