Подскажите, есть ли какой-нить открытый код, который генерит ресурсы самостоятельно например RT_VERSION, RT_MANIFEST ? Или нужно написать велосипед №100500 ? http://www.codeproject.com/KB/library/VerInfoLib.aspx взорвало мозг, думал опять инудсы развлекаются - оказалось парень из России.
манифест разве не состоит просто из символов без всяких там структур? а вот за ссылочки на другие ресурсы был бы премного благодарен сам долго искал, но нашел только по рт_стринг
Проблема в том, что люди хотят кодес вкрутить в свои крипторы. А Фасм генерит нестандартную структуру ресурсов (т.е. отличную от ms), как и нестандартные опкоды. Т.е. через 3-4 прогруза палить будут именно по ресурсам ))
А как это не стандартные ресурсы, если бы они были не стандартными, они бы не правильно работали. Нет?
> А как это не стандартные ресурсы, если бы они были не стандартными, они бы не правильно работали. Нет? более правильно сказать неклассические. PS: велосипеды часто лучше поделок индуссов.
проблемы нет, просто не хотел заниматся тем, что уже возможно есть. самая ктсати прикольная реализация, которую пока нашел это - resource.inc, спасибо за подсказку.
freyr В Сам себе Iczelion начиная с #121 примеры с ручным созданием ресурсов, в принципе ничего сложного, посмотри разберёшься
эм... а где там ручное создание ресурсов? просмотрел темы, начиная со 121, посмотрел файлы, сорцы. Нигде генерации не увидел. Максимум - LoadCursor
MSoft ntut_07-02.asm курсор в ресурсах ntut_08-01.asm меню ntut_10-01.asm диалог, элементы управления диалога и меню и т.д.
ты имеешь ввиду это? если да, то я в упор не вижу здесь ручного создания ресурсов Ты, видимо, задачу изначально не понял. Покажи мне код у себя, в результате которого на выходе будем иметь ехе со сгенерированной секцией ресурсов. Причем, без LoadIcon, LoadCursor и т.д.
т.е. оте от таблички и огрызки заголовков в начале файла - это типа и есть генерация???? Мсье знает толк в извращениях
MSoft Так название темы Закат солнца вручную или так ли уж нужен линкер (и компилятор ресурсов) должно говорить само за себя. И РЕ-заголовок и секции импорта и ресурсов сделаны вручную, но и я не говорил об автоматической генерации, по длине (в байтах) они короче стандартных и там нет никаких "печатей Баала", только то что вы сами соизволите написать Код (Text): ;resurce----------------------------------------------------------- %define MFR_END 80h %define MFR_POPUP 1 %define MFT_STRING 0 %define MFS_ENABLED 0 %define MFT_SEPARATOR 800h %define RT_MENU 4 %define POPUP 0x0010 %define MENUBREAK 0x0040 %define ENDMENU 0x0080 %define DS_SETFONT 0x0040 resource: .Characteristics dd 0 .TimeDateStamp dd 0 .MajorVersion dw 0 .MinorVersion dw 0; .NumberOfNamedEntries dw 0;количество ресурсов с именами .NumberOfIdEntries dw 1;количество ресурсов с идентификаторами ;на этом уровне идентификатор ресурсов является типом ресурса dw RT_MENU,0;номер типа ресурса dw x-resource,8000h; если во 2-ом слове установлен старший бит - есть ссылка ;на оглавление второго уровня. В 1-ом слове смеение второго оглавления ;относительно начала раздела ресурсов x: .Characteristics dd 0 .TimeDateStamp dd 0 .MajorVersion dw 0 .MinorVersion dw 0; .NumberOfNamedEntries dw 0;количество ресурсов с именами .NumberOfIdEntries dw 1;количество ресурсов с идентификаторами ;на этом уровне идентификатор ресурсов является идентификатором меню dw IDC_MENU,0 dw x1-resource,8000h; если во 2-ом слове установлен старший бит - есть ссvлка ;на оглавление третьего уровня. В 1-ом слове смещение третьего оглавления ;относительно начала раздела ресурсов x1: .Characteristics dd 0 .TimeDateStamp dd 0 .MajorVersion dw 0 .MinorVersion dw 0; .NumberOfNamedEntries dw 0;количество ресурсов с именами .NumberOfIdEntries dw 1;количество ресурсов с идентификаторами ;на этом уровне идентификатор ресурсов является идентификатором языка, который ;используется данным ресурсом 16 * SUBLANG_ + LANG_ dw 40Ah,0,x2-resource,0 x2:;struct _IMAGE_RESOURCE_DATA_ENTRY .OffsetToData dd menu-exebase .Size dd end_menu-menu .CodePage dd 0 .Reserved dd 0 menu dw 0, 0,POPUP|MFR_END UTEXT "&File" dw MFT_STRING | MFS_ENABLED,MI_OPEN UTEXT "Op&en" dw MFT_STRING | MFS_ENABLED,MI_SAVE UTEXT "&Save" dw MENUBREAK,0,0;NOTEXT dw MFT_STRING | MFS_ENABLED | MFR_END,MI_EXIT UTEXT "&Exit" end_menu: end_resource: ;--------------------------------------------------------------------- import: dd 0,0,0,DLLNAME1-exebase; RVA to DLL name .FirstThunk dd user_table-exebase dd 0,0,0,DLLNAME2-exebase; RVA to DLL name .SecondThunk dd kernel_table-exebase; RVA to 2nd thunk dd 0,0,0,DLLNAME3-exebase; RVA to DLL name dd comdlg_table-exebase; RVA to 2nd thunk dd 0,0,0,0 user_table: RegisterClass dd _RegisterClass-exebase CreateWindowEx dd _CreateWindowEx-exebase GetMessage dd _GetMessage-exebase DispatchMessage dd _DispatchMessage-exebase DefWindowProc dd _DefWindowProc-exebase DestroyWindow dd _DestroyWindow-exebase TranslateMessage dd _TranslateMessage-exebase SendMessage dd _SendMessage-exebase SetFocus dd _SetFocus-exebase MoveWindow dd _MoveWindow-exebase,0 kernel_table: CreateFile dd _CreateFile-exebase GlobalAlloc dd _GlobalAlloc-exebase GlobalFree dd _GlobalFree-exebase GlobalLock dd _GlobalLock-exebase GlobalUnlock dd _GlobalUnlock-exebase ReadFile dd _ReadFile-exebase WriteFile dd _WriteFile-exebase CloseHandle dd _CloseHandle-exebase ExitProcess dd _ExitProcess-exebase,0 comdlg_table: GetSaveFileName dd _GetSaveFileName-exebase GetOpenFileName dd _GetOpenFileName-exebase,0 _RegisterClass db 0,0,'RegisterClassA' _CreateWindowEx db 0,0,'CreateWindowExA' _GetMessage db 0,0,'GetMessageA' _DispatchMessage db 0,0,'DispatchMessageA' _DefWindowProc db 0,0,'DefWindowProcA' _DestroyWindow db 0,0,"DestroyWindow" _SendMessage db 0,0,'SendMessageA' _SetFocus db 0,0,'SetFocus' _MoveWindow db 0,0,'MoveWindow' _TranslateMessage db 0,0,'TranslateMessage',0 DLLNAME1 db 'user32' _CreateFile db 0,0,'CreateFileA' _GlobalAlloc db 0,0,'GlobalAlloc' _GlobalFree db 0,0,'GlobalFree' _GlobalLock db 0,0,'GlobalLock' _GlobalUnlock db 0,0,'GlobalUnlock' _ReadFile db 0,0,'ReadFile' _WriteFile db 0,0,'WriteFile' _CloseHandle db 0,0,'CloseHandle' _ExitProcess db 0,0,'ExitProcess',0 DLLNAME2 db 'kernel32' _GetSaveFileName db 0,0,'GetSaveFileNameA' _GetOpenFileName db 0,0,'GetOpenFileNameA',0 DLLNAME3 db 'comdlg32' end_import: END_SECTION:
Очевидно под генерацией подразумевалось: добавление секции ресурсов с нуля к pe файлу на входе, либо добавление отдельных элементов в уже существующую секцию с ресурсами. Готовых решений не встречал, самым близким по сути может оказаться FindResource\LoadResource\LockResource\UpdateResource из MSDN, но это не совсем ручной метод.
очевидно, что подразумевалось создание ресурса с 0 руками - создание структуры, смещений, заполнение всех полей и т.д.