Листинг из книги Крупника Код (Text): .386 .model flat,stdcall option casemap:none ExitProcess proto :DWORD GetStdHandle proto :DWORD WriteConsoleA proto :DWORD,:DWORD,\ :DWORD,:DWORD,:DWORD includelib kernel32.lib .data stdout DWORD ? msg BYTE "Не могу молчать!",0dh,0ah cWritten DWORD ? .code start: invoke GetStdHandle, -11 mov stdout, eax invoke WriteConsoleA, stdout, ADDR msg,\ sizeof msg, ADDR cWritten, 0 invoke ExitProcess, 0 end start Код должен вывести слова на экран, странно но в OllyDbg регистр EAX никак не меняется и равен 00000000, а по книге в EAX должен появиться дескриптор устройства - число 0Ch. Использую MASM32 v10.
aptyp След. раз бинарник тоже зааттачивай, а то некоторые как я масм32 в жизнь не поставят,т.к. фасм, а затачивать под него им влом )))
aptyp Вызови AllocConsole вначале перед GetStdHandle ElvisInterupt,я асм ваще не знаю кодю на си,но тем неменее листинг понимаю...
aptyp, скопипастил твой код, замутил так: Код (Text): ml /c /coff aptyp.asm link /subsystem:console aptyp.obj - да все норм. Вывод твоей строки показан, EAX - изменяется. //правда на другое число.
В книге сказано что после этого в EAX должно быть число 0Ch Код (Text): invoke GetStdHandle, -11 mov stdout, eax ну вот прикрепляю картинку OllyDbg где видно что EAX остаётся пуст
aptyp Не факт -- у меня после invoke GetStdHandle, -11 в регистре eax = 7 надпись то на экран выводится? Если выводится -- значит пример рабочий -- переходи к следующему в аттаче похожий работающий пример с батником PS к аттачу добавляй информацию для восстановления (я ставлю 5%) на сайте проблемы с аттачами и твой архив не открывается
Всмысле возможно проблема в библиотеке kernel32.lib? И вообще не выводится на экран при запуске ничего(очень быстро закрывается не разглядеть). Где взять нормальные библиотеки kernel32.lib и другие ?
Ещё вот тот kernel32.lib который я использую http://rapidshare.com/files/207528232/kernel32_lib.rar.html
aptyp Заголовок Вашего бинарника из Olly: 00400108 E9390000 DD 000039E9 ; CheckSum = 39E9 0040010C 0200 DW 0002 ; Subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI 0040010E 0000 DW 0000 ; DLLCharacteristics = 0 Ну и что Вы после этого ожидаете? В посте 4 ответ дан.
Всмысле в книге неверный пример или что это значит? Я использую RadASM и компилирую всё через него. Кто использует его подскажите в чём дело?
Проект не выбирал, просто при открытии программы пишу сразу код или создаю новый файл File>New File и пишу.
aptyp Чтобы RadAsm правильно выбрал ключи и последовательность компиляции, необходимо либо создавать проект либо потом руками вбивать ключи трансляции, компоновки и т.п. Поэтому File -> New Project. В comboBox выбираете masm. Тип проекта - Console App. Имя проекта добавить по вкусу. Нажимаем Next. Среди шаблонов выбираем none. Нажимаем Next. В данном случае для удобства можно снять все птички кроме asm. Нажимаем Next. Нажимаем Finish. Теперь можете вбивать текст программы и жать Make -> Build.