Помогите найти ошибку вывода строки на экран

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

  1. aptyp

    aptyp Member

    Публикаций:
    0
    Регистрация:
    17 сен 2008
    Сообщения:
    81
    Листинг из книги Крупника
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4. ExitProcess proto :DWORD
    5. GetStdHandle proto :DWORD
    6. WriteConsoleA proto :DWORD,:DWORD,\
    7. :DWORD,:DWORD,:DWORD
    8. includelib kernel32.lib
    9. .data
    10. stdout DWORD ?
    11. msg BYTE "Не могу молчать!",0dh,0ah
    12. cWritten DWORD ?
    13. .code
    14. start:
    15. invoke GetStdHandle, -11
    16. mov stdout, eax
    17. invoke WriteConsoleA, stdout, ADDR msg,\
    18. sizeof msg, ADDR cWritten, 0
    19. invoke ExitProcess, 0
    20. end start
    Код должен вывести слова на экран,
    странно но в OllyDbg регистр EAX никак не меняется и равен 00000000,
    а по книге в EAX должен появиться дескриптор устройства - число 0Ch.
    Использую MASM32 v10.
     
  2. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    aptyp
    След. раз бинарник тоже зааттачивай, а то некоторые как я масм32 в жизнь не поставят,т.к. фасм, а затачивать под него им влом )))
     
  3. mupsy

    mupsy New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2008
    Сообщения:
    55
    aptyp
    Вызови AllocConsole вначале перед GetStdHandle
    ElvisInterupt,я асм ваще не знаю кодю на си,но тем неменее листинг понимаю...
     
  4. pr0mix

    pr0mix New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    107
    aptyp, скопипастил твой код, замутил так:

    Код (Text):
    1. ml /c /coff aptyp.asm
    2. link /subsystem:console aptyp.obj
    - да все норм. Вывод твоей строки показан, EAX - изменяется. //правда на другое число.
     
  5. aptyp

    aptyp Member

    Публикаций:
    0
    Регистрация:
    17 сен 2008
    Сообщения:
    81
    В книге сказано что после этого в EAX должно быть число 0Ch
    Код (Text):
    1. invoke GetStdHandle, -11
    2. mov stdout, eax
    ну вот прикрепляю картинку OllyDbg где видно что EAX остаётся пуст
     
  6. aptyp

    aptyp Member

    Публикаций:
    0
    Регистрация:
    17 сен 2008
    Сообщения:
    81
    Вот бинарник
     
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    aptyp
    Не факт -- у меня после invoke GetStdHandle, -11 в регистре eax = 7 надпись то на экран выводится? Если выводится -- значит пример рабочий -- переходи к следующему :) в аттаче похожий работающий пример с батником
    PS к аттачу добавляй информацию для восстановления (я ставлю 5%) на сайте проблемы с аттачами и твой архив не открывается :dntknw:
     
  8. jaja

    jaja New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2008
    Сообщения:
    243
    Может у него криво похучили гетстдхендл?
     
  9. aptyp

    aptyp Member

    Публикаций:
    0
    Регистрация:
    17 сен 2008
    Сообщения:
    81
    Всмысле возможно проблема в библиотеке kernel32.lib?
    И вообще не выводится на экран при запуске ничего(очень быстро закрывается не разглядеть).

    Где взять нормальные библиотеки kernel32.lib и другие ?
     
  10. aptyp

    aptyp Member

    Публикаций:
    0
    Регистрация:
    17 сен 2008
    Сообщения:
    81
  11. aptyp

    aptyp Member

    Публикаций:
    0
    Регистрация:
    17 сен 2008
    Сообщения:
    81
  12. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    aptyp
    Заголовок Вашего бинарника из Olly:
    00400108 E9390000 DD 000039E9 ; CheckSum = 39E9
    0040010C 0200 DW 0002 ; Subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI
    0040010E 0000 DW 0000 ; DLLCharacteristics = 0

    Ну и что Вы после этого ожидаете? В посте 4 ответ дан.
     
  13. aptyp

    aptyp Member

    Публикаций:
    0
    Регистрация:
    17 сен 2008
    Сообщения:
    81
    Всмысле в книге неверный пример или что это значит?
    Я использую RadASM и компилирую всё через него. Кто использует его подскажите в чём дело?
     
  14. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    aptyp
    Верный пример в книге. Какой в RadAsm тип проекта выбираете при его создании?
     
  15. aptyp

    aptyp Member

    Публикаций:
    0
    Регистрация:
    17 сен 2008
    Сообщения:
    81
    Проект не выбирал, просто при открытии программы пишу сразу код или создаю новый файл File>New File и пишу.
     
  16. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    aptyp
    Чтобы RadAsm правильно выбрал ключи и последовательность компиляции, необходимо либо создавать проект либо потом руками вбивать ключи трансляции, компоновки и т.п.
    Поэтому File -> New Project. В comboBox выбираете masm. Тип проекта - Console App. Имя проекта добавить по вкусу. Нажимаем Next. Среди шаблонов выбираем none. Нажимаем Next. В данном случае для удобства можно снять все птички кроме asm. Нажимаем Next. Нажимаем Finish. Теперь можете вбивать текст программы и жать Make -> Build.
     
  17. aptyp

    aptyp Member

    Публикаций:
    0
    Регистрация:
    17 сен 2008
    Сообщения:
    81
    l_inc
    Да я уже попробовал через проект, больше спасибо, а то уже не знал на что грешить ))
     
  18. aptyp

    aptyp Member

    Публикаций:
    0
    Регистрация:
    17 сен 2008
    Сообщения:
    81
    Всем спасибо короче, дело пошло, прям чудеса )))