Страница: 1 |
Вот пример запуска EXE файла из переменой. Автор функции "LoadPbDllFromMemory" Однако при этом, в запускаемом EXE, не будут работать ресурсные API... :))) '****************************************************************************** %IMAGE_ORDINAL_FLAG = &H80000000 Type IMAGE_IMPORT_BY_NAME Type IMAGE_IMPORT_DESCRIPTOR Type IMAGE_BASE_RELOCATION Global hExe As Dword
Блин, ну что еще за глюк! 'Вот исходник %IMAGE_ORDINAL_FLAG = &H80000000 Type IMAGE_IMPORT_BY_NAME Type IMAGE_IMPORT_DESCRIPTOR Type IMAGE_BASE_RELOCATION Global hExe As Dword Идиотизм, почему там помещается мало текста в сообщении? Короче, ссылка вот исходник... http://scriptcom.narod.ru/loader.bas Нужен спец, который сможет реализовать востановление ресурсов в загруженном EXE. У меня пока не получается... Вот тут есть статья про это дело: http://rsdn.ru/article/baseserv/peloader.xml Правда там на Паскале, и я ни хрена в нем не понял... Про ресурсы там чего-то пишется, как сделать чтобы они не терялись. Посмотри. Страница: 1 |
Вопрос: Запуск EXE файла из переменной, массива, и т.п.
Добавлено: 19.05.04 13:52
Автор вопроса: alex
Семен Матусовский. В принципе, запуск из секции тоже самое, главное передать
правильный указатель на первый байт "lpImageDosHeader" загружаемого экзешника.
LoadResource и т.п. Так-как RVA секции .rsrc перестал быть валидным!
RVA любой секции вычисляется как RVA = VA – АДРЕС ЗАГРУЗКИ, где VA -
виртуальный адрес элемента в памяти, а АДРЕС ЗАГРУЗКИ берется из поля
Op-tionalHeader.ImageBase, в том случае, если он равен ImageBase,
либо вычисляется непосредственно лоадером. Короче говоря, для нормального
отображения ресурсов, надо пересчитать смещения запускаемого EXE, и
скорректировать его PE Header с учетом VA(Virtual Address) PE заголовка
лоадера...
На практике я это еще не проверял, но как мне кажется это верное решение.
Хотя если у кого нибудь, есть мнения и исходники по этому поводу, кидайте
сюда, обсудим!
' Слегка переделанный пример загрузчика PE-файлов Семена Матусовского.
' Загружает EXE файл(созданный компилятором PB) в переменную, и запускает его.
' Ресурсные API в загруженном EXE файле не работают.
' Для примера можно запустить C:\PBWIN\BIN\PBEDIT.EXE, загрузится только форма
' без тулбара и битмапок.
#Compile Exe "LOADER.EXE"
#Register None
#Dim All
#Include "Win32Api.Inc"
Hint As Word
ImpName As Asciiz * 254
End Type
OriginalFirstThunk As Dword
TimeDateStamp As Dword
ForwarderChain As Dword
pName As Dword
FirstThunk As Dword
End Type
VirtualAddress As Dword
SizeOfBlock As Dword
End Type
Function LoadPbDllFromMemory (ByVal lpRawDll As Dword, ByVal RawDllSize As Dword, lpImageDll As Dword) As Dword
Dim sSysInfo As Local SYSTEM_INFO
Dim ImagePages As Local Dword
Dim lpImageDosHeader As Local IMAGE_DOS_HEADER Ptr
Dim lpImageNtHeaders As Local IMAGE_NT_HEADERS Ptr
Dim lpImageSectionHeader As Local IMAGE_SECTION_HEADER Ptr
Dim lpImageImportDescriptor As Local IMAGE_IMPORT_DESCRIPTOR Ptr
Dim lpImageImportByName As Local IMAGE_IMPORT_BY_NAME Ptr
Dim lpImageBaseRelocTable As Local IMAGE_BASE_RELOCATION Ptr
Dim lpDllName As Local Asciiz Ptr
Dim szDllName As Local String
Dim hDll As Local Dword
Dim lpFuncNameRef As Local Dword Ptr
Dim lpFuncAddr As Local Dword Ptr
Dim lpTypeOffset As Word Ptr
Dim TpOffset As Word
Dim lpLink As Local Dword Ptr
Dim fOldProtect As Local Dword
Dim i As Local Dword
Dim j As Local Dword
Dim k As Local Dword
Dim Protection() As Local Byte
Dim Addr1 As Local Dword
Dim Addr2 As Local Dword
Dim Pg &nb
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
alex
Вопросов: 84
Ответов: 453
Профиль | | #1
Добавлено: 19.05.04 13:53
Номер ответа: 2
Автор ответа:
alex
Вопросов: 84
Ответов: 453
Профиль | | #2
Добавлено: 19.05.04 13:55
'******************************************************************************
' Слегка переделанный пример загрузчика PE-файлов Семена Матусовского.
' Загружает EXE файл(созданный компилятором PB) в переменную, и запускает его.
' Ресурсные API в загруженном EXE файле не работают.
' Для примера можно запустить C:\PBWIN\BIN\PBEDIT.EXE, загрузится только форма
' без тулбара и битмапок.
#Compile Exe "LOADER.EXE"
#Register None
#Dim All
#Include "Win32Api.Inc"
Hint As Word
ImpName As Asciiz * 254
End Type
OriginalFirstThunk As Dword
TimeDateStamp As Dword
ForwarderChain As Dword
pName As Dword
FirstThunk As Dword
End Type
VirtualAddress As Dword
SizeOfBlock As Dword
End Type
Function LoadPbDllFromMemory (ByVal lpRawDll As Dword, ByVal RawDllSize As Dword, lpImageDll As Dword) As Dword
Dim sSysInfo As Local SYSTEM_INFO
Dim ImagePages As Local Dword
Dim lpImageDosHeader As Local IMAGE_DOS_HEADER Ptr
Dim lpImageNtHeaders As Local IMAGE_NT_HEADERS Ptr
Dim lpImageSectionHeader As Local IMAGE_SECTION_HEADER Ptr
Dim lpImageImportDescriptor As Local IMAGE_IMPORT_DESCRIPTOR Ptr
Dim lpImageImportByName As Local IMAGE_IMPORT_BY_NAME Ptr
Dim lpImageBaseRelocTable As Local IMAGE_BASE_RELOCATION Ptr
Dim lpDllName As Local Asciiz Ptr
Dim szDllName As Local String
Dim hDll As Local Dword
Dim lpFuncNameRef As Local Dword Ptr
Dim lpFuncAddr As Local Dword Ptr
Dim lpTypeOffset As Word Ptr
Dim TpOffset As Word
Dim lpLink As Local Dword Ptr
Dim fOldProtect As Local Dword
Dim i As Local Dword
Dim j As Local Dword
Dim k As Local Dword
Dim Protection() As Local Byte
Dim Addr1 As Local Dword
Dim Addr2 As Local Dword
Dim Pg As Local Dword
Dim Pg1 As Local Dword
Dim Pg2 As Local Dword
lpImageDosHeader = lpRawDll
If RawDllSize < SizeOf(IMAGE_DOS_HEADER) Then Function = 1: Exit Function
If @lpImageDosHeader.e_magic <> %IMAGE_DOS_SIGNATURE Then Function = 1: Exit Function ' invalid DOS signature
If RawDllSize < @lpImageDosHeader.e_lfanew + SizeOf(IMAGE_NT_HEADERS) Then Function = 1: Exit Function
lpImageNtHeaders = lpImageDosHeader + @lpImageDosHeader.e_lfanew
If @lpImageNtHeaders.Signature <> %IMAGE_NT_SIGNATURE Then Function = 1: Exit Function ' invalid
Номер ответа: 3
Автор ответа:
alex
Вопросов: 84
Ответов: 453
Профиль | | #3
Добавлено: 19.05.04 13:59
Номер ответа: 4
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #4
Добавлено: 19.05.04 18:00
Ну так это есть везде-несколько топиков на PowerBasic.com, да и ресурсы запускаемого файла не отображаются...
Номер ответа: 5
Автор ответа:
alex
Вопросов: 84
Ответов: 453
Профиль | | #5
Добавлено: 20.05.04 11:00
Номер ответа: 6
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #6
Добавлено: 20.05.04 17:41