PDA

Просмотр полной версии : Удаленные потоки



Robin Hood [phd]
03.01.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
03.01.2008, 18:03
Параметры на стеке местами менять не пробовали?

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

Robin Hood [phd]
03.01.2008, 19:26
Я нашел ошибку!!!)))
Кому интересно, в строке
const WORD ver = 0x0101;

Эта константа должна быть объявлена как DWORD. Точно объяснить почему не могу, действовал по наитию....

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