Доброго времени суток.
Пытаюсь запустить удаленный поток (CreateRemoteThread), в другом процессе. Пишу на VC++ ну и вставки асмы там делаю.
Собственно все вроде ясно, мне нужно, что бы этот поток открыл TCP соединение. Я подгружаю библиотеку ws2_32.dll, с помощью GetProcAddress нахожу адрес api-функции WSAStartup.
Вот ее описание c MSDN:
int WSAStartup(
__in WORD wVersionRequested,
__out LPWSADATA lpWSAData
);
Где, lpWSAData указатель на структуру WSADATA.
Вот кусок моего кода:
...
struct { // Собственно это и есть структура WSAData
WORD wVersion;
WORD wHighVersion;
char szDescription[WSADESCRIPTION_LEN+1];
char szSystemStatus[WSASYS_STATUS_LEN+1];
unsigned short iMaxSockets;
unsigned short iMaxUdpDg;
char FAR * lpVendorInfo;
} ws, *pws;
pws = &ws;
const WORD ver = 0x0101; // MAKEWORD (1,1)
__asm {
push pws
push ver
call dword ptr WSASUaddr // Адрес ф-ции WSAStartup (проверял в дебагере - верно)
}
...
Это не работает ;( И при запуске удаленного потока просто закрывает приложение даже без сообщения об ошибке.
Если кто нб что нб понял и видит мою ошибку буду очень благодарен. Может я неправильно передаю указатель на структуру????
Заранее благодарен!
Удаленные потоки
Модератор: Andy
Параметры на стеке местами менять не пробовали?
It's a long way to the top if you wanna rock'n'roll
-
- Сообщения: 3
- Зарегистрирован: 03 янв 2008, 16:48
Вы имеете ввиду :
__asm {
push ver
push pws
...
???
Пробовал, эффект тот же: приложение просто закрывается... Самое непостижимое, что библиотека действительно загружается, адрес ф-ции верный...почему не работает не могу осознать....
__asm {
push ver
push pws
...
???
Пробовал, эффект тот же: приложение просто закрывается... Самое непостижимое, что библиотека действительно загружается, адрес ф-ции верный...почему не работает не могу осознать....
-
- Сообщения: 3
- Зарегистрирован: 03 янв 2008, 16:48
Я нашел ошибку!!!)))
Кому интересно, в строке
const WORD ver = 0x0101;
Эта константа должна быть объявлена как DWORD. Точно объяснить почему не могу, действовал по наитию....
Кому интересно, в строке
const WORD ver = 0x0101;
Эта константа должна быть объявлена как DWORD. Точно объяснить почему не могу, действовал по наитию....
Да хватит вам париться со своим ассемблером! нада расслабиться, а то у мну сейчас мозг взорвётся и улетит в космос 
попейте бухло, посмотрите парнушку и всё путём!!!!!!!!!

попейте бухло, посмотрите парнушку и всё путём!!!!!!!!!
