Преобразование образов NRG в ISO
Быстрый способ преобразования NRG-файла в ISO
Позавчера возникла проблема: нужно было срочно переставить Windows XP (ибо VMWare так больно упала, что Windows пал смертью храбрых). Всё хорошо, но вот родного инсталляционного диска под рукой не было, а инсталлятор жил на NTFS-разделе (кстати, DOS-драйвер для чтения NTFS почему-то оказался бессильным). По счастью, на FAT32-диске нашелся образ загрузочного диска. Одна проблема: образ был [...]
← Вернуться к полной версии записи «Преобразование образов NRG в ISO»…
Автор: Vladimir; опубликовано в: C/C++; метки: convert, ISO, Nero, NRG, nrg2iso, преобразованиеМар
2008
Комментарии к статье «Преобразование образов NRG в ISO» (3) »
Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.
Оставить комментарий к записи «Преобразование образов NRG в ISO»
गते गते पारगते पारसंगते बोधि स्वाहा
Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.


Этот код
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);
}
На ассемблере выглядит изящнее
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-битной архитектуре, во-вторых, не учитываете особенности планирования инструкций.
Я бы сделал так:
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:
; ...
Так будет короче
Автору пять с плюсом! Спасибо!