Удаленные потоки

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Robin Hood [phd]
Сообщения: 3
Зарегистрирован: 03 янв 2008, 16:48

03 янв 2008, 17:02

Доброго времени суток.
Пытаюсь запустить удаленный поток (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 (проверял в дебагере - верно)
}
...

Это не работает ;( И при запуске удаленного потока просто закрывает приложение даже без сообщения об ошибке.
Если кто нб что нб понял и видит мою ошибку буду очень благодарен. Может я неправильно передаю указатель на структуру????

Заранее благодарен!
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

03 янв 2008, 18:03

Параметры на стеке местами менять не пробовали?
It's a long way to the top if you wanna rock'n'roll
Robin Hood [phd]
Сообщения: 3
Зарегистрирован: 03 янв 2008, 16:48

03 янв 2008, 19:11

Вы имеете ввиду :
__asm {
push ver
push pws
...
???
Пробовал, эффект тот же: приложение просто закрывается... Самое непостижимое, что библиотека действительно загружается, адрес ф-ции верный...почему не работает не могу осознать....
Robin Hood [phd]
Сообщения: 3
Зарегистрирован: 03 янв 2008, 16:48

03 янв 2008, 19:26

Я нашел ошибку!!!)))
Кому интересно, в строке
const WORD ver = 0x0101;

Эта константа должна быть объявлена как DWORD. Точно объяснить почему не могу, действовал по наитию....
silverman
Сообщения: 4
Зарегистрирован: 04 янв 2008, 20:38

04 янв 2008, 21:42

Да хватит вам париться со своим ассемблером! нада расслабиться, а то у мну сейчас мозг взорвётся и улетит в космос :confused:
попейте бухло, посмотрите парнушку и всё путём!!!!!!!!! :eek:
Ответить