прямой вызов шелла из си

Тема в разделе "WASM.HEAP", создана пользователем wsd, 8 окт 2008.

  1. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    есть шелл бинарный
    unsigned char shell[144]
    как его правильно н си вазывать
    (void)(shell)(); в ауте
    и еще вопрос,если вызов с параметрами?
     
  2. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Код (Text):
    1. char shell[144];
    2.  
    3. int (__stdcall* pMyShell)(int param1, void* param2, double param3);
    4. pMyShell = (int (__stdcall*)(int param1, void* param2, double param3))shell;
    5.  
    6. int result = pMyShell(10, 0, 14.5);
    Надеюсь, в примере все понятно без комментариев.
    __stdcall при необходимости сменить на __cdecl, тип и количество параметров подставить свои.
     
  3. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    хзхз, по мне - так __asm - вызов намного проще и семпотнее будет.
     
  4. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Comer_
    __asm call and jamp отпадают - всё должно быть на си
    просто не могу допетрить ситатсис си на вызов бин кода, а он точно есть
     
  5. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Ursus
    спасибо только при приёме
    .\hel1.cpp(35) : error C2143: syntax error : missing ')' before '__cdecl'
    .\hel1.cpp(35) : error C2059: syntax error : ')'
     
  6. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Код (Text):
    1. // code.c:
    2. typedef void (__cdecl *EXEC)(void);
    3.  
    4. char buff[1] = { 0xC3 };
    5.  
    6. main()
    7. {
    8.     EXEC exec = (EXEC)buff;
    9.     exec();
    10. }
    11.  
    12.  
    13. cl code.c /link /section:.data,RWE /entry:main
     
  7. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    nester7
    Код (Text):
    1. typedef void(__cdecl *kl)(int* aa , int* ab);
    2.     kl = (kl)buf;
     
  8. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    int = (int)buf; =)
     
  9. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Velheart
    ты не топиком ошибся?
    ты к чему это шлёпнул?
    nester7
    разрулиш?
     
  10. q3zLfzIhM3

    q3zLfzIhM3 New Member

    Публикаций:
    0
    Регистрация:
    8 окт 2008
    Сообщения:
    7
    wsd
    Вам на другой форум нужно.
    Тут Вам не помогут точно, если до сих пор не понятно как объявить указатель на функцию или привести любой другой указатель к нему.
     
  11. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
     
  12. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Код (Text):
    1. [b]//code.cpp[/b]
    2. typedef void (__cdecl *EXEC)(void);
    3.  
    4. char buff[1] = { 0xC3 };
    5.  
    6. int main()
    7. {
    8.     EXEC exec = (EXEC) &buff[0];
    9.     exec();
    10. }
     
  13. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Никак не вкурю почему ты в хипе спросил, а не в WASM.LANG.C :)
     
  14. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    nester7
    nester7
    ну никак не каститться!!!
    Код (Text):
    1. typedef void(__cdecl *kh)(int* aa , int* ab);
    2.     kh assa = (kh)buf;
    объясни без приколов
     
  15. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    wsd
    Ээээ... ну это вроде как ответ был на "почему не компилируется?" "с юмором" =)
     
  16. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    wsd
    Осеннее обострение?
    Код (Text):
    1. unsigned char shell[16*1024];
    2. ...
    3. #ifdef TEST_SHELLCODE
    4.   do {
    5.     void (*start)(void) = (void (*)(void))&shell[0];
    6.     __asm int 3;
    7.     start();
    8.  
    9.     // вариант с пар-рами
    10.     void (*start)(int,int,int) = (void (*)(int,int,int))&shell[0];
    11.     __asm int 3;
    12.     start(0,0,0);
    13.   } while (0);
    14. #endif /* TEST_SHELLCODE */
     
  17. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    wsd
    Код (Text):
    1. void foo(void)
    2. {
    3.   typedef void (__cdecl *kh)(int*, int*);
    4.  
    5.   unsigned char buf[112];
    6.   int x, y;
    7.  
    8.   kh assa = (kh) &buf[0];
    9.  
    10.   assa(&x, &y);
    11. }
     
  18. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Код вроде:
    для С++ - это unsigned char [ххх] to kh,
    тоесть массив к указателю.

    А код вроде:
    "Нормальный" - адрес к адресу приводятся.
     
  19. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Блин, во написал, ну, в общем, смыл ясен :)
     
  20. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Кстати, вместо kh assa = (kh) &buf[0];, можно писать kh assa = (kh) &buf;