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

Тема в разделе "MS Visual C++", создана пользователем Robin Hood, 3 янв 2008.

  1. Robin Hood

    Robin Hood Гость

    Доброго времени суток.
    Пытаюсь запустить удаленный поток (CreateRemoteThread), в другом процессе. Пишу на VC++ ну и вставки асмы там делаю.
    Собственно все вроде ясно, мне нужно, что бы этот поток открыл TCP соединение. Я подгружаю библиотеку ws2_32.dll, с помощью GetProcAddress нахожу адрес api-функции WSAStartup.

    Вот ее описание c MSDN:

    Код (Text):
    int WSAStartup(
    __in WORD wVersionRequested,
    __out LPWSADATA lpWSAData
    );
    Где, lpWSAData указатель на структуру WSADATA.

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

    Заранее благодарен!
     
  2. PowerUserX

    PowerUserX Гость

    привет

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

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

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


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

    или просто развиваешься?
     
  3. Robin Hood

    Robin Hood Гость

    Спасибо за ответ. Я поколдовал немножко, оказалось, что ошибка у меня в коде. Строка
    Код (Text):
    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 все схаваетЪ )
     
  4. Pasha

    Pasha Гость

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

    PowerUserX Гость

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

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

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

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

Поделиться этой страницей