Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

СообЧА. Программирование на Delphi


Информационный Канал Subscribe.Ru - www.lycos.ru

Subscribe.Ru :СообЧа программирование на дельфи !
—Сообча : программирование на дельфи

Некому оформить сайт ?
Нужен красивый баннер ?
Нет времени на обновление сайта?

Качественное оформление, работа с самыми современными средствами, FLASH,CGI,JAVA
Тогда вам сюда !!!!
Менее чем за 50$ мы поможем


----- (перед просмотром рассылку лучше сохранить)

 

 В этом выпуске:

 

Фонд поддержки наших проектов и рассылки:
Получатель: ИНН 7707083893 Новгородское ОСБ № 8629
Счет получателя: 47422810343029900030
Банк получателя
:Новгородское ОСБ № 8629 г.Великий Новгород 30101810100000000698 Бик 044959698

Храпунову Кириллу Алексеевичу

! желающим помочь рассылке


Рассылки Subscribe.Ru это стильно удобно, и информативно!
СообЧа (СООБщество ЧАйников). Обмен опытом, вопросы, ответы.


подпишись и подпиши друга!!!!

 Contact (Связь с Нами):

Pixel@novgorod.net + Subject: (см ниже)

 

Vcl Haunting

"Золотой Чайник"

Вопрос по дельфи N (N номер версии)

Help!

Реклама

Полезный линк

 

Наш сайт : pixelsoft.narod.ru

Новости СЕТИ

К заголовку

Приношу извинения за ОГРОМНОЕ количество опечаток и недоделок , которые попали в прошлый выпуск. В тот день вообще жизнь не удалась ... (Виды сдохли, софт потерял любимый , да еще и с 5-ти утра на ногах был...)

 

Книги по Дельфи которые ВЫ ОБЯЗАНЫ ПРОЧИТАТЬ...

Не столько учебник, сколько справочное пособие по наиболее используемым алгоритмам и командам...

Пожалуй лучший учебник по дельфи 6 на сегодняшний день, вам даже не надо знать дельфи, чтобы начать ...

  • Дельфи 5: Руководство разработчика БД
  •  

    DirectX. Графика в проектах Delphi (+CD - ROM)
    Лучшее пособие для тех кто решил связаться с DirectX, по слухам на CD помимо примеров есть DirectxSDK7.0 от Microsoft...

    Среда программирования Delphi 5-6. Справочное пособие
    Книга полностью описывает среду программирования Delphi, которая включает в себя полный набор визуальных инструментов для быстрой и профессиональной разработки приложений для различных операционных систем, кроме того рассмотрены проблемы перехода между этими версиями дельфи.

    Программирование в Delphi 6 (+ floppy дискета ) Чайникам рекомендуется!!!

    Книга содержит методические и справочные материалы по новой версии системы визуального объектно-ориентированного программирования Delphi 6 и предшествующим версиям Delphi 5 и 4. Рассмотрены такие новые возможности Delphi, как кросс-платформенные приложения, технологии доступа к данным ADO, InterBase Express, dbExpress, компоненты — серверы СОМ, технологии распределенных приложений СОМ, CORBA, MIDAS, новая методика диспетчеризации действий...

 

Как лучше перевести RGB картинку в 256 цветную

К заголовку

Q:Как лучше перевести RGB картинку в 256 цветную.

Надо писать процедуру сведения цвета $xxxxxx к виду $xx, можно создать 256 цветную RGB палитру(6*6*6)+(3*3*3), а потом методом округления приводить к наиболее(математически) близкому цвету

 


Еще Немного новостей...

К заголовку

Дорогие друзья, эта статья написана не для того, чтобы дать Вам очередной способ взлома программных продуктов, а чтобы научить Вас самостоятельно создавать и эффективно использовать серьезные защитные алгоритмы в своих собственных разработках.

Введение

На этот раз я представляю Вам сугубо теоретическое исследование, и все рассматриваемые программы написал сам. Кроме них нам понадобятся Delphi и исходный код VCL (я использовал Delphi 4.0 Client/Server Edition), а также дизассемблер IDA Pro (я пользуюсь v3.8b). Полагаю Вы понимаете Ассемблер и имеете опыт в написании программ на Delphi с применением VCL.

Delphi генерирует огромное количество мёртвого и практически одинакового кода для любого приложения, использующего VCL. Тем не менее множество приложений относительно успешно создаются на Delphi, как же бедным исследователям отделять зёрна от плевел?

Вопрос этот совершенно не нов, первым (из известных мне) трудом подобного рода был материал LaZaRuS'а "Нахождение стандартных функций в программах на Delphi/C++ Builder" (http://www.phase-one.com.au/fravia/laza_s11.htm) на Fravia летом этого года. Для тех, кто не знаком с английским, краткий конспект шедевра LaZaRuSа: он сделал тоже, что и я (трудно в наше время быть оригинальным...) - написал тестовое приложение (правда, он использовал Borland C++ Builder), а потом дизассемблировав его W32Dasm'ом, попытался выяснить, как выглядят типичные действия по заполнению окна регистрации на Ассемблере.

Получилось у него примерно следующее:

функция, закрывающая модальный диалог, должна поместить значение, возвращаемое методов ShowModal, помещает это значение по смещению 0144h. Сами значения можно посмотреть в файле Source/Rtl/Win/windows.pas:
ID_OK=1
ID_CANCEL=2
ID_ABORT=3
ID_RETRY=4
ID_IGNORE=5
ID_YES=6
ID_NO=7
ID_CLOSE=8
ID_HELP=9
для разрешения/запрещения кнопок используется смещение 40h в классе TButton;
для быстрого поиска функции MessageBox() (скажем, в SoftICE) нужно найти вызов GetActiveWindow(), затем собственно MessageBox() вслед за ним SetActiveWindow() (!);
функция, записывающая или считывающая текст из элементов управления TEdit, делает это через указатель по смещению 01CCh.
А теперь плохая новость - для Delphi 4 (я исхожу из предположения, что все новые программы обычно пишутся на самых новых средствах разработки) всё вышеизложенное не соответсвует действительности.
Обнаружение нужных классов

Я набросал в несистематическом порядке несколько элементов управления (TEdit, TButton и TBitBtn - именно они чаще всего применяются в диалогах регистрации), и написал примерно такой непритязательный код:

--------------------------------------------------------------------------------
type

TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
procedure MyClickHandler(Sender: TObject);
public
{ Public declarations }
end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin

MessageDlg('BitBtn1Click',mtConfirmation, [mbOk], 0);
ModalResult := mrOk;
end;

procedure TForm1.MyClickHandler(Sender: TObject);
begin

MessageDlg('MyClickHandler',mtConfirmation, [mbOk], 0);
ModalResult := mrCancel;
end;

procedure TForm1.FormShow(Sender: TObject);
begin

MessageDlg('FormShow',mtConfirmation, [mbOk], 0);
BitBtn2.OnClick := MyClickHandler;
end;

procedure TForm1.Button1Click(Sender: TObject);
var

S: String;
begin

S := Trim(Edit1.Text) + Trim(Edit2.Text);
Application.MessageBox(PChar(S),'Button1Click',IDOk);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

MessageDlg('Button2Click',mtConfirmation, [mbOk], 0);
Edit1.Enabled := not Edit1.Enabled;
Button3.Enabled := not Button3.Enabled;
end;

Чтобы мне было легко идентифицировать мой же собственный код, я поместил в каждой функции вызов MessageDlg(). Также здесь не все обработчики назначаются во время проектирования - функция MyClickHandler() назначается обработчиком динамически при показе формы (в методе FormShow()). Компилируем, запускаем - безделица, конечно, но работает... Размер EXE-файла 329728 байт! И это буквально за пять минут! Да я - серьезный программист!

Далее неплохо было бы дизассемблировать полученный файл.

Общее замечание: строки в Delphi в бинарном виде выглядят не как во всех прочих языках - т.е. не оканчиваются нулевым символом, отчего IDA Pro не опознаёт их как строки. Вначале идёт один байт - длина, а далее - сама строка, причём её конец никак более не обозначен. Это верно для так называемых коротких строк, длина которых меньше 256 байт. К несчастью, именно такими строками пользуется механизм поддержки классов.

Надо заметить, что, несмотря на все свои достоинства, IDA Pro не справляется со всеми тонкостями программ, написанных на Delphi - утверждает, что на месте VTBL находится код, не распознаёт строк в стиле Pascal'я и прочие мелочи - так что нас выручит только её интерактивность. И, кстати, не забудьте применить файл сигнатур для VCL 4 - для моего файла IDA Pro опознала аж 2297 библиотечных функций!

Для начала посмотрим, как выглядит стартовая процедура Start() (004444A8h):

push ebp
mov ebp, esp
add esp, 0FFFFFFF4h
mov eax, offset dword_0_444398
call @@InitExe ; ::intcls'::InitExe
mov eax, ds:off_0_445CDC
mov eax, [eax]
call @TApplication@Initialize ; TApplication::Initialize
mov ecx, ds:off_0_445DAC
mov eax, ds:off_0_445CDC
mov eax, [eax]
mov edx, ds:off_0_443F30
call @TApplication@CreateForm ; TApplication::CreateForm
mov eax, ds:off_0_445CDC
mov eax, [eax]
call @TApplication@Run ; TApplication::Run
call @@Halt0 ; ::intcls'::Halt0
Самым многообещающим здесь выглядит вызов метода TApplication::CreateForm(), аргументом ему передаётся некий указатель - на структуру RTTI (Run-Time Type Information, информация о типе времени исполнения) класса нашей формы TForm1. Исследуем ее.
По смещению DWORD от начала структуры RTTI расположен указатель на VTBL. Далее идут 12 нулей (возможно выравнивание по границе, а возможно эти три DWORDа тоже что-нибудь означают). А по смещению 10h в расположен указатель (DWORD) на некую рекурсивную структуру, которую я назвал список наследственности:

список наследственности
Смещение Тип Описание
0 byte значение не выяснено
1 byte длина N Pascal-строки
2 string имя класса
n+2 dword ещё один указатель на VTBL
n+6 dword указатель на указатель (!) предка этого класса; обычно он указывает на 4 байта дальше себя, но я не берусь этого гарантировать
n+10 word значение не выяснено
n+12 byte длина Pascal-строки
N+13 string имя модуля, где определяется этот класс
     

Путешествуя по этому списку, можно с лёгкостью выяснить генеалогическое дерево класса TForm1:

TForm, файл Forms
TCustomForm, файл Forms
TScrollingWinControl, файл Forms
TWinControl, файл Controls
TControl, файл Controls
TComponent, файл Classes
TPersistent, файл Classes
TObject, файл System
У последнего указатель на предка содержит нулевое значение - видимо, означая конец списка.
Вернёмся к структуре RTTI класса TForm1. По смещению 14h находится указатель на компоненты, которыми владеет данный класс. Это все элементы списка Components во время разработки.

Продолжение ЭТОЙ статьи следует...


 

 

Zaluskiy Anton(COOLer)  и Khrapunov Kirill(Pixel)  - ведущие проекта    "Мир Delphi" (C) Pixelsoftware(Pixel)& Delphi 2000-2002(COOLer)


http://subscribe.ru/
E-mail: ask@subscrib
e.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное