· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Код и данные в одной секции

. 1 . 2 . >>

Посл.отвђт Сообщен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

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.063