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

  • Автор темы Robin Hood
  • Дата начала
R

Robin Hood

#1
Доброго времени суток.
Пытаюсь запустить удаленный поток (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 (проверял в дебагере - верно)
}
...
Это не работает ;( И при запуске удаленного потока просто закрывает приложение даже без сообщения об ошибке.
Если кто нб что нб понял и видит мою ошибку буду очень благодарен. Может я неправильно передаю указатель на структуру????

Заранее благодарен!
 
P

PowerUserX

#2
привет

Возможно твоему удаленному потоку не хватает привелегий
тебе надо функцией AdjustTokenPrivileges установить для потока привелегии

можешь сам искать в инете
а так - http://support.microsoft.com/kb/q131065/

Да еще вопрос - просто интересно ...


Нафиг тебе asm вставки?
Если пишешь shell код то надо все писать на asm и нужен совершенно другой подход
Если пишешь на сях - то asm тебе ничем не поможет, ты явно лучше компилятора не
прооптимизируешь код. Максимум перебьешь SEH для потока ...

или просто развиваешься?
 
R

Robin Hood

#3
Спасибо за ответ. Я поколдовал немножко, оказалось, что ошибка у меня в коде. Строка
Код:
const WORD ver = 0x0101
Константа должна быть объявлена как DWORD. Сейчас все работает.


<!--QuoteBegin-PowerUserX+4:01:2008, 11:36 -->
<span class="vbquote">(PowerUserX @ 4:01:2008, 11:36 )</span><!--QuoteEBegin-->Нафиг тебе asm вставки?
[snapback]92184" rel="nofollow" target="_blank[/snapback]​
[/quote]

Во первых привыкаю к асме, судя по всему, у нас с ней будет длительное общение в будущем :)
А во вторых асма позволяет не задумываться о преобразовании типов. Вот почему на сях я не могу напрямую присвоить (DWORD) = (LPVOID)?? ))) А на асме MOV все схаваетЪ )
 
P

Pasha

#4
Для: Robin Hood
Плюс плюсов - в строгой типизации. WORD в DWORD они вполне нормально приводят, не вписал бы вставку на асме - не наступил бы на грабли.
 
P

PowerUserX

#5
Во первых привыкаю к асме, судя по всему, у нас с ней будет длительное общение в будущем ;) А во вторых асма позволяет не задумываться о преобразовании типов. Вот почему на сях я не могу напрямую присвоить (DWORD) = (LPVOID)?? ))) А на асме MOV все схаваетЪ )

как раз то на сях все это можно делать (не говоря уже о привееднии типов) - все что можно на asm:)

double var1 = 0.0;
int var2 = 1;
var1 = *(double*)&var2; - и прочитает 4 байта ниже переменной var2;

p.s. ну енто уже в другой жизни или в другой теме