не пойму почему такая ошибка в СИ

Тема в разделе "WASM.BEGINNERS", создана пользователем featurelles, 29 мар 2009.

  1. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Добрый день.
    Начал программировать под Win совсем недавно. В Visual Studio 2008 пишу вот такой код.
    При его компиляции выдаёт ошибку error C2440: '=' : cannot convert from 'char (*)[13]' to 'void (__cdecl *)(void)'

    Но на мой взгляд всё верно )....
    Как исправить проблему??
     
  2. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    opcode = (void(__cdecl*)(void))&shellcode; тебя, насколько я понимаю, не устраивает, ога?
    Код (Text):
    1. int __cdecl main(int argc, const char **argv, const char *envp)
    2. {
    3.   dword_40042C = (int (*)(void))dword_400290;
    4.   dword_40042C();
    5.   return printf("helloooo");
    6. }
    edit:
    эм..
    edit:
    ой
     
  3. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Comer_
    Оказалось что устраивает =) всё откомпилировалось.
    Но появилась новая проблема.
    После выполнения, код не доходит до printf . Появляется следующее сообщение.
    Unhandled exception at 0x0041700c in 5.exe: 0xC0000005: Access violation writing location 0x00000000.
    shellcode должен быть написан верно.

    Вот что выводит дебагер
     
  4. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    ну во первых слип должен был вызываться по правилам шеллкодирования: от поиска базы до самой функи.
    а у тебя там захардкодено как то прям ..

    всё неправильно.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Код (Text):
    1.     68 10270000 push 2710
    2.     B8 4624807C mov eax,kernel32.Sleep
    3.     FFD0        call eax
    С пикодом всё нормально, модуль в студию.
     
  6. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    слип совпал на удивление. но ты c3 забыл.
     
  7. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    да всем спать пора.
    официально объявляю: все пропарились и забыли про ret .D

    всем нам просто пора спать уже)
     
  8. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
  9. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Ещё раз напишу полностью код.
    Ошибка Unhandled exception at 0x0041700c in 5.exe: 0xC0000005: Access violation writing location 0x00000000.
    Появляется до вызова функции printf.
    Также появляется когда я пробую вызвать shell через асм.
    наподобии следующего
    __asm{
    push eax
    mov eax, opcode
    call eax
    pop eax
    }
     
  10. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    c3 ? =)
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    featurelles
    Интересно узнать, почему ты не протрассировал этот код, веть продебажить быстрее, чем написать пост ?
     
  12. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    ну слыышь .D

    ты из нас спал вобще меньше всех, видать))

    c3
    , он же ret .)
    мой код конпелируй!

    вся фишка в элементе общения ,)
     
  13. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Comer_

    Чёрт) точно....чтото глупо получилось)
    спасибо.


    Clerk
    я до вчерашнего дня, ниразу не программировал в VS да и вообще для windows...всё както ново...
    сейчас даже не понимаю почему opcode = (void(__cdecl*)(void))&shellcode; писать нужно именно так,.... например..что это за (__cdecl*) такой)
     
  14. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Ещё раз спасибо за быстрый овтет.
    Теперь всё работает
     
  15. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..