Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: SpaceZero
Дата сообщения: 05.12.2011 07:06

Цитата:
I am not Liar

Простая инициализация структуры 0-ми:

Код:
machine m = { 0 };
Автор: bomzzz
Дата сообщения: 06.12.2011 08:22
никто не знает можно ли как то обхитрить процедуру обработки консольного окна? видоизменить его можно, а вот субклассировать - access denied, а хукнуть хукается, но сообщения не приходят никакие ему.



убрал пункт меню и добавил, а как его обработать никак не получается
Автор: chr00me
Дата сообщения: 06.12.2011 08:42
Народ, кто-нибудь работал с сырыми сокетами??
Дело в том, что функция select все время 0 возвращает, ругается на то, что сокет не готов к чтению. Даже если ставить бесконечный таймаут.

iRet = select(0, &readfds, NULL, NULL, &tVal);

iRet собстно всегда 0...
Автор: bomzzz
Дата сообщения: 06.12.2011 08:47
думаю не будет очень нескромно сказать "Я РАБОТАЛ" . ошибку надо в коде искать
Автор: chr00me
Дата сообщения: 06.12.2011 08:59
Ок. Вот код:


Код:
int iRet;
struct sockaddr_in sDest;
struct sockaddr_in sSrc;
LPHOSTENT lpHost;
DWORD dwElapsed;
SOCKET sd_win; // наш сокет, через который будем производить пинг
WORD wVersion;
WSADATA wsaData;
wVersion = MAKEWORD (2, 2); // указываем версию WinSock

int wsaInitError = WSAStartup (wVersion, &wsaData);
if (wsaInitError != 0)
{
qDebug() << "Error!!!";
exit(1);
}
else
{
// Если найден WinSock2, то создаем "сырой" сокет
sd_win = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
if (sd_win == SOCKET_ERROR)
{
qDebug() << "Error!!!"
break;
}
Автор: bomzzz
Дата сообщения: 06.12.2011 09:37
я могу тебе только на MASM32 дать рабочий пример. вот консольное окно, через сокс5 прокси сервер заходит на смтп сервер яндекса и получает от него ответ. проще не могу сходу примера найти, у меня где то был для телнета. я не особо в СИ коде рублю но вот не все у тебя вижу в коде, апи функции то одинаковые

[more]    .386

    .model flat, stdcall
    option casemap :none

    include \masm32\include\windows.inc

    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\wsock32.inc
    include \masm32\include\masm32.inc

    includelib \masm32\lib\masm32.lib
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\wsock32.lib

.data
    MessageBuffer        db INTERNET_MAX_URL_LENGTH dup (0)
    ProxyAddress        db '127.0.0.1',0                ; прокси адрес
    szNOAUTH        db 5h, 1h, 0h                    ; Начальное приветствие от клиента
    szCONNECT        db 5, 1, 0, 3, 14, 'smtp.yandex.ru', 0, 25;, 0    ; Последующая идентификация
    szEHLO             db 'HELO localhost', 13, 10
                db 0
    szSEND            db 'HELO localhost', 13, 10
                db 0
.data?
    Buffer            db 65536 dup(?)
    String            db 65536 dup(?)
    wsaData            WSADATA<>
    s1            SOCKET ?
    sin1            sockaddr_in <>

.code
start:

    invoke WSAStartup, 0101h, ADDR wsaData
    mov ax,0101h
    cmp ax, wsaData.wVersion
    jne NoTelnet
    invoke socket,AF_INET,SOCK_STREAM,IPPROTO_TCP;0
    mov s1,eax
    mov ax,AF_INET
    mov sin1.sin_family,ax
    invoke htons,9050                            ; прокси порт
    mov sin1.sin_port,ax
    invoke inet_addr, addr ProxyAddress
    mov sin1.sin_addr,eax

    invoke connect, s1, addr sin1, sizeof sockaddr_in
    cmp eax, -1
    je NoTelnet
    invoke send, s1, addr szNOAUTH, 3, 0

    invoke recv, s1, addr String, 65536,0
    invoke send, s1, addr szCONNECT, sizeof szCONNECT, 0
    invoke recv, s1, addr String, 65536,0
    cmp byte ptr [String+1],0
    jne ProxyFail

    invoke recv, s1, addr String, 65536,0
    lea ebx, String
    add ebx, eax
    mov byte ptr [ebx],0
    invoke StdOut,ADDR String

    invoke StdOut,ADDR szSEND            ;???????????????????????????????????
    invoke send, s1, addr szSEND, sizeof szSEND,0
    invoke recv, s1, addr String, 65536,0
    lea ebx, String
    add ebx, eax
    mov byte ptr [ebx],0
    invoke StdOut,ADDR String

    invoke StdOut,ADDR szEHLO
    invoke send, s1, addr szEHLO, sizeof szEHLO,0
    invoke recv, s1, addr String, 65536,0
    lea ebx, String
    add ebx, eax
    mov byte ptr [ebx],0
    invoke StdOut,ADDR String

ProxyFail:
    invoke closesocket, s1
NoTelnet:
    invoke WSACleanup
    invoke Sleep, 5000
    invoke ExitProcess,0
end start[/more]

Добавлено:
я прям щас скомпили и зашел на сервер яндекса - 100% рабочий код
Автор: chr00me
Дата сообщения: 06.12.2011 09:49
Спасибо большое за пример! Но тут оговорочка небольшая:

Цитата:

invoke socket,AF_INET,SOCK_STREAM,IPPROTO_TCP;

тип сокета не Raw, а Tcp. С ним я проблем не имел, разве что с блокировкой иногда, но это решаемо. А именно с "сырым" уже n-ые сутки бьюсь...или ICMP заголовок заполнил неправильно, или функция

Код: sendto(sd_win, (LPSTR)&echoReq, sizeof(ECHOREQUEST), 0, (LPSOCKADDR)&sDest, sizeof(SOCKADDR_IN));
Автор: bomzzz
Дата сообщения: 06.12.2011 09:52
я так и подумал что RAW е\наверно и есть сырой. я htons утебя в коде не вижу.


а если попробовать IP монитором посмотреть. хотя бы сокет открывается? в книгах часто очепятки
Автор: chr00me
Дата сообщения: 06.12.2011 10:05
Тут дело такое. Сокет стартует. Дескриптор есть, даже закрывать получается без проблем(это было передрано со старых проектов - разницы, какой сокет закрывать абсолютно нет).
Снифферю iptools-ом, говорит, что уходит пакет, что все вроде в норме. А вот отклик обратно уже не приходит..
И еще. Если включен iptools, то ответ идет, только от самого себя
Мой вывод в дебаге:

Цитата:
socket is created!!! His id: 388
192.168.0.201
Reply from: 192.168.0.173 : bytes=64 time= 0 ms TTL= 127


..0.201 - это куда я послал
..0.173 - откуда получил отклик(моя машина)
Автор: bomzzz
Дата сообщения: 06.12.2011 10:08
а ты сам себе пошли и посмотри что приходит. у меня такой струмент есть очень удобный
http://www.killprog.com/netviewr.html

Добавлено:
в смысле на 127.0.0.1
Автор: chr00me
Дата сообщения: 06.12.2011 10:27
ничего...хм, судя по снифферу, то на 127.0.0.1 даже не уходит ничего..
Автор: Shandera
Дата сообщения: 06.12.2011 10:36
Здравствуйте уважаемые специалисты.
Помогите пожалуйста, ни как не могу справиться с проблемой.

Windows 7. Visual Studio 2010. Приложение Windows form.

На форме имеется поле textBox и кнопка .
В textBox вводим имя процесса.exe и по нажатию кнопки он должен завершаться.

Нашёл как минимум три функции для решения этой задачи и начал с самой старой.
Но как оказалась, не все так просто, раньше с таким не сталкивался.

Код:
String^ p2 = textBox1 -> Text;
System::IntPtr sz2 = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(p2);
WinExec("taskkill /f /im " + (LPCSTR)sz2.ToPointer(), SW_HIDE);

Выдаёт ошибку:
error C2679: бинарный "+": не найден оператор, принимающий правый операнд типа "LPCSTR" (или приемлемое преобразование отсутствует) может быть "встроенный оператор C+++(volatile const System::Object ^, volatile const System::String ^)" или "встроенный оператор C+++(volatile const System::String ^, volatile const System::Object ^)" или "встроенный оператор C+++(volatile const System::String ^, volatile const System::String ^)" при попытке сопоставить список аргументов "(System::String ^, LPCSTR)"

Подскажите пожалуйста, как победить?
Автор: kotlomoy
Дата сообщения: 06.12.2011 18:22
Shandera
Правильно ругается - указатели на строки нельзя складывать.
Сначала слепи целую строку, вместе с "taskkill /f /im ", а потом уже все вместе приводи к указателю LPCSTR
Автор: Shandera
Дата сообщения: 06.12.2011 19:21
kotlomoy
Вот так всегда. То, что на поверхности, не увидел! Спасибо Вам огромное, все работает!
Автор: bomzzz
Дата сообщения: 07.12.2011 07:29
люди а как сделать, я у чужего окна позицию меняю SetWindowPos и у него что естественно стиль пропадает TOPMOST чета не соображу как этот стиль получить чтоб как было так и осталось

Добавлено:
ступил - WS_EX_TOPMOST

Добавлено:


messagebox хукнул, а с консолью не знаю что делать, суперклассинг еще остался.
Автор: bomzzz
Дата сообщения: 08.12.2011 00:11
в MessageBox есть недокументированная возможность, по крайней мере мне нигде не попадалось. при получении мессадж боксом сообщения WM_TIMER оно закрывается. то есть если получить его хендл и запустить одноразовый таймер то по окончании таймера оно закроется.

Добавлено:
а библиотеки для всех компиляторов одинаковые? то есть можно дллку используя ее библиотеку полученную на масме импортировать в код на СИ, Делфи и тд без прямой загрузки LoadLibrary???
Автор: ItsJustMe
Дата сообщения: 08.12.2011 00:45

Цитата:
а библиотеки для всех компиляторов одинаковые?

Ну нет, конечно. Даже сами компиляторы разные

Цитата:
то есть можно дллку используя ее библиотеку полученную на масме импортировать в код на СИ, Делфи и тд без прямой загрузки LoadLibrary???

Это, я так понимаю, вопрос о том, можно ли из IDA взять код нужной функции какой-нибудь dll и вставить в свое проект. Можно, конечно, на то она и IDA

Или речь идет о загрузке dll при загрузке самого приложения? Этот способ загрузки отличается от LoadLibrary только моментом загрузки (в первом случае - во время загрузки приложения, во втором - во время вызова LoadLibrary) и более ничем. (Только еще тем, что без этой dll приложение откажеться грузиться вообще.) Так что, если вы можете использовать dll через LoadLibrary, вы сможете ее использовать и другими способами
Автор: bomzzz
Дата сообщения: 08.12.2011 01:07
ну может я не очень правильно объяснил. все сишники которые на масме начинают программировать, любят сишные дллки в своих программах использовать и обычно на форуме масма тут же готовые библиотеки выкладывают и инклуды. вот я думаю про унивесаьность библиотек обратной масм - си.
а чем на Си билблиотеки делают, в масме програмка inc2l.exe лежит в папке с инклудами

Цитата:
и более ничем.

быстродействием

Добавлено:
масм32 сам из студии выковырен и любителями доброхотами улучшен, должна быть совместимость
Автор: ItsJustMe
Дата сообщения: 09.12.2011 02:26
Немного не в тему: А что значит "улучшен"? Пару байт в экзешнике поменяли?
По теме: Если имеются ввиду стандартные lib файлы (набор COFF OBJs), то естественно они будут совместимы.

Цитата:
а чем на Си билблиотеки делают

Microsoft Library Manager
Offtop starts
PS: Ну и совсем не в тему, но хочется отметить Когда читал твои посты в разных темах в этом разделе, то глядя на твою аватарку думал, что ты девочка Вот, думал, какая девчонка смышленая, лучше многих мужиков в программировании шарит! Потом, в процессе дальнейшего чтения постов, понял свою error
Offtop ends
Автор: bomzzz
Дата сообщения: 09.12.2011 03:02
ну я на новый год такую ляпнул, потом забыл про нее, а потом обратил внимание что она борется с сексизмом, но постоянно забывал писать так чтоб было непонятно какого я полу. а в сетке у нас я прям мужиков до бешенства довожу в чате, там я в женском роде пишу под одним ником. но тама уже тоже сомневаются что женский пол как раз из за сексизма. гыгы
модер по ип спалил - пришлось выдумывать историю что это моя жена. но всем так идея понравилась что не хотят верить
Добавлено:
смайлики на разные эмоции есть такие что только женские есть. вот из за этого все началось
Автор: V0lt
Дата сообщения: 19.12.2011 23:51
Есть код...
Код: Было:
aoutline += MulDiv(alpha, 0xff - w->m_style.alpha[2], 0xff);
Стало:
aoutline += alpha*(0xff-w->m_style.alpha[2])/0xff;

Было:
a = MulDiv(a, 0xff - alpha, 0xff);
Стало:
a = a*(0xff-static_cast<DWORD>(alpha))/0xff;
Автор: Abs62
Дата сообщения: 20.12.2011 00:03
V0lt
Что касается замены вызова функции на непосредственные вычисления - думаю да, скорости. Вряд ли промежуточные значения здесь выйдут за пределы 32 разрядов, так что MulDiv тут - это оверкилл.
Что же до static_cast, по идее в C++ так и надо делать. Суть та же, но допустимость такого приведения контролируется компилятором на этапе компиляции. Сложнее случайно накосячить.
Автор: V0lt
Дата сообщения: 20.12.2011 16:03
Abs62
Про MulDiv понял, про static_cast нет . Есть два разных целых типа. Зачем мудрить с static_cast? Имхо, компилятор в любом случае будет проверять.
Автор: Abs62
Дата сообщения: 20.12.2011 16:09
V0lt

Цитата:
Имхо, компилятор в любом случае будет проверять.

Индейская хижина. Вот, откомпилируй и посмотри, на что компилятор ругнётся, а на что нет.

Код: int i=5;
int *p1=(int *)i;
int *p2=static_cast<int *>(i);
Автор: V0lt
Дата сообщения: 20.12.2011 19:24
Abs62
Тут немного другое - значение преобразуется в указатель.
Хотя вся эта идея с static_cast смахавает на чей-то бред. Вместо того, чтобы сделать полноценную проверку у обычного приведения типов, сделали дополнительный оператор (да еще корявый по синтаксису), в котором "все хорошо".
Автор: SpaceZero
Дата сообщения: 21.12.2011 07:00

Цитата:

Тут немного другое - значение преобразуется в указатель.
Хотя вся эта идея с static_cast смахавает на чей-то бред. Вместо того, чтобы сделать полноценную проверку у обычного приведения типов, сделали дополнительный оператор (да еще корявый по синтаксису), в котором "все хорошо".


C++ более строг к типам данных в отличие от C.
static_cast, const_cast, reinterpret_cast (и реже используемый dynamic_cast), вместо
одного оператора () приведения типов для всех случаев жизни в C, введены
для того, чтобы, как отмечено выше, было бы "Сложнее случайно накосячить".
Компилятор к сожалению не настолько "умён", чтобы понять, а действительно ли требовалось приведение переменной к типу указателя:

Код:
int i=5;
int *p1=(int *)i; /* а может преобразование в указатель не требовалось? */
Автор: c0ep
Дата сообщения: 27.12.2011 06:36
Народ, приведите пожалуйста, кто может, пример простейшего кода на с++ программы, сворачивающуюся в трей.
Автор: bomzzz
Дата сообщения: 27.12.2011 07:59
c0ep
когда жмешь на кнопку свернуть окно (или закрыть) окно делаешь невидимым а иконку выводишь, ну или если иконка так уже была не выводишь. в инете полно примеров готовых
Автор: SpaceZero
Дата сообщения: 27.12.2011 08:09
Если речь идет о Windows, то для вывода иконки в трей используют функцию Shell_NotifyIcon с первым параметром NIM_ADD.
А тут есть примеры пользования функцией.
Автор: bomzzz
Дата сообщения: 28.12.2011 14:27
никто не подскажет, я хочу из дллки diskcopy.dll вытащить образ флоппи дискеты как ресурс. вот как это сделать
http://xpdll.nirsoft.net/diskcopy_dll.html
вот тут его тип указан как All Others. я взял функцию EnumResourceNames перебрал все ресурсы, ни у одного нет размера 1.4 мб как у дискеты. вот че делать?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.