|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Авг 21, 2004 15:44:14 Пытаюсь объединить данные и код в одну секцию. Данные должны поддаваться изменению. .386 .model flat, stdcall extern GetModuleHandleA:proc, ExitProcess:proc .code start: call GetModuleHandleA, 0 mov hInst, eax call ExitProcess, 0 hInst dd ? end start При старте выскакивает ошибка "00401007h couldn't be written". У секции code поле flag = 60000020h, я поменял на E0000020h. Ошибка изменилась на "00000000h couldn't be written". Та же ошибка при flag=F0000060h, F00000E0h, E00000E0h. У меня щас 3 вопроса 1. Возможно ли вообще объединить код и изменяемые из него данные? 2. Какой же всё-таки должен flag у секции? 3. Можно ли заставить tasm прописывать нужный flag при создании EXE? P.S. И, кстати, как грамотрее называть поле flag (название взято из hiew)? PE Tools->Pe Editor называет его "Characteristics". Мне лично нравится "Attributes". |
|
|
Дата: Авг 21, 2004 16:16:14 У Billy Belcebu упоминалась утилита pewrsec которая нужным образом меняет атрибуты. Сделать такой изврат проще с помощью fasm-а: section '.code' code readable writeable executable Здесь идет сначала код, а затем (после ExitProcess) данные У такой секции flag=E0000060 Еще это умеет делать мелкософтовский линкер, а насчет tlink-а не знаю, не пробовал. |
|
|
Дата: Авг 21, 2004 16:42:55 в масме есть утилитка editbin - запусти с /? узнай ключи - любой секции любой параметр можно включить/выключить и еще кое-что |
|
|
Дата: Авг 21, 2004 16:45:49 Zombook, набери в поиске "merge". |
|
|
Дата: Авг 21, 2004 20:40:46 Zombook 1. Возможно ли вообще объединить код и изменяемые из него данные? Вообще возможно всё обьеденить в одну секцию . Секции "не отвечают" за то , что например содержат в себе импорт или данные . Для этого существует Data Directories в PE . Правда если есть ресурсы , то наверное они должны располагаться первыми , чтоб была видна иконка у ехе . А у секции (страницы в памяти) главное чтоб стоял доступ на запись если требуеться . И достигнуть этого , до момента исполнения кода , наверное можно только одним способом - установкой требуемой характеристики секции в PE , тогда это сделает лоадер . Теоретически ... Но а практически , в аттаче пример : - всё в одной секции - атрибут на запись НЕ стоит - и это работает (тестил w95,NT4.0,w2ksp4) _752585500__project.zip |
|
|
Дата: Авг 21, 2004 20:47:04 Это я тормозил... Tasm, оказывается, не добавляет import table (.idata), если в исходнике нет .data или .data ничего не содержит. И несмотря на extern GetModuleHandleA:proc, ExitProcess:proc полученный EXE содержит лишь одну секцию - CODE (!). Из-за этого и было обращение к 00000000. Синтаксис Fasm показался мне неудобным, непривычно как-то. Но, похоже, придётся его юзать, раз Tasm такой тупой :) Да, еще одна проблема - Fasm добавляет лишнюю секцию .reloc, приходится каждый раз убирать с помощью PE Tools->Rebuild PE. Всем спасибо! |
|
|
Дата: Авг 21, 2004 21:14:23 Fasm добавляет лишнюю секцию .reloc Да ну , кажеться FASM сам добавляет только секцию .flat с неинициализированными данными , если такие будут перед первой секцией . format PE GUI 4.0 rb 1000h section '.code' code readable writeable Т.е. rb 1000h попадут в секцию flat , а самом файле их не будет . |
|
|
Дата: Авг 21, 2004 23:49:58 bogrus > есть ресурсы , то наверное они должны располагаться первыми , чтоб была видна иконка у ехе . Похоже, что для иконки это не важно (см. аттач), а вот для Version Info необходимо, т.к. если IMAGE_RESOURCE_DIRECTORY находится НЕ в начале секции, то виндос не показывает инфу по правому клику :( Zombook > Fasm добавляет лишнюю секцию .reloc FASM добавляет релоки, если fixups указано для какой-нибудь секции. _865613036__window.zip |
|
|
Дата: Авг 25, 2004 12:00:08 Читай информацию в MSDN по темам: Virtual, Alloc, Protect... В твоём случае поможет функция VirtualProtect Syntax: BOOL VirtualProtect( LPVOID lpAddress, DWORD dwSize, DWORD flNewProtect, PDWORD lpflOldProtect); .386 .model flat, stdcall include c:\masm32\include\windows.inc include c:\masm32\include\kernel32.inc includelib c:\masm32\lib\kernel32.lib .code start: invoke GetModuleHandle, 0 ;------------- push 0 push PAGE_READWRITE push 4 push offset hInst call VirtualProtect ;------------- mov hInst, eax invoke ExitProcess,eax hInst dd ? end start end start |
|
|
Дата: Авг 25, 2004 14:48:16 S_T_A_S_ Похоже, что для иконки это не важно (см. аттач), а вот для Version Info необходимо Привет . Я вот думаю , а какая разница в начале секции или нет . Врядли ресурсных api-шек это интересует . Они скорее смотрят смещение таблицы ресурсов в Data Directories PE заголовка , а потом от него перебирают на предмет RT_ICON,RT_GROUP_ICON,RT_DIALOG и т.д. , смотря что они ищут . Т.е. по аналогии с таблицей импорта , идёт перебор модулей , ф-ций и заметь , они не глючат где бы не располагались . FASM кажеться ещё не умеет (или я не знаю как) хранить в одном ресурсе RT_GROUP_ICON несколько записей об RT_ICON . Т.е. чтобы можно было по разным своим идентификаторам обращаться к разным иконкам одного и того же .ico файла . А в твоём аттаче ресурсы интересные , PE Explorer говорит они повреждены или пожаты , а на файле window2.exe вообще их не может найти . Я к тому , что может макросы FASM-а пока не отлажены как следует , т.е. надо будет ещё попробывать с ресурсами внешнего редактора . |
|
|
Дата: Авг 25, 2004 15:16:50 one Это круто, для своего же процесса VirtualAlloc юзать ;-) |
|
|
Дата: Авг 25, 2004 16:04:54 А чем, Asterix, не нравиться идея изменение доступа из кода программ? |
|
|
Дата: Авг 25, 2004 17:39:37 bogrus > какая разница в начале секции или нет . Врядли ресурсных api-шек это интересует Дык вот сам не пойму, почему так. Но факт. Скомпилировал ещё один вариант, там и иконка и version info есть, но т.к. IMAGE_RESOURCE_DIRECTORY сдвинута, то version info не показывает (в XP по крайней мере). Хотя оно там всё есть, и смещения вроде правильные (всё это одни и теже макросы делают). У меня были проблемы с ресурсами из-за того, что не выравнивал данные по DWORD, но тут уже такого нет. Макросы для ресурсов я делал сам, есть тут. Всё по Microsoft Portable Executable and Common Object File Format Specification. Но там явно указано, что под ресурсы должна быть отдельная секция, таким образом IMAGE_RESOURCE_DIRECTORY обязательно будет в начале! Ещё где-то встечал упоминания про то, что название этой секции важно, т.к. в какой-то dll якобы есть привязка именно к нему, но на практике я с проблемами из-за этого не сталкивался, подозреваю, что это для виндос 95 какого-нибудь. PE Explorer у мя нет, да после такой рекламы и качать что-то не охота :). Смотрю всё PEview, маленький и на асме написан :). У него, кстати, есть один глюк, связанный с определением IMAGE_RESOURCE_DATA_ENTRY, я сообщал автору, но он вроде бы так и не испровавил. Мои макросы сейчас построены с учетом того, чтобы этот глюк не проявлялся. one > А чем не нравиться идея изменение доступа из кода программ? Дык проще сразу указать R/W/E атрибуты для секции ;-) _1899992397__window2.zip |
|
|
Дата: Авг 25, 2004 19:45:01 S_T_A_S_ Теоретически, ведь никто не мешает сделать в файле всего одну секцию, обозвать ее .rsrc, причем ресурсы расположить строго вначале секции, а код сразу за ресурсами, тогда вроде все формальности будут соблюдены и файл должен быть валиден для всех систем, вот только антивири могут ругатца :-) |
|
|
Дата: Авг 25, 2004 21:26:00 S_T_A_S_ Всё по Microsoft Portable Executable and Common Object File Format Specification. Тогда мне не понятно , почему PE Explorer на них злиться , а те что с фасмом идут - глотает нормально . PE Explorer явно должен вести себя соответственно MSPECOFF . Но там явно указано, что под ресурсы должна быть отдельная секция Я не могу найти такого упоминания Ещё где-то встечал упоминания про то, что название этой секции важно, т.к. в какой-то dll Нагуглил "oleaut32.dll rsrc TYPELIBS" , но не знаю каким боком oleaut32.dll к этому относиться . Я тестил имя секции отличное от .rsrc (даже пробывал в VB-шной проге менять) и никаких проблем не возникло . Видимо существует одна проблема в которой надо разобраться : Пропадает отображение Version_Info по правому клику , если ресурсы находяться не в начале секции . И побочная проблема , а может и нет : Не всякий пакер такой файл запакует , а редактор ресурсов поправит . PE Explorer в таком случае удаляет из файла всё кроме ресурсов , ессно файл становиться не рабочий , а ResHacker вообще ресурсов не видит . Asterix KAV не ругаитца :) , об других антивирях интересно услышать . 1437781759__project.zip |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.063 |