Пирогов Владислав Юрьевич

О программировании, ИТ и обо всем по немногу

Previous Entry Share Next Entry
Объяснение
pirogov_vju
Вот уже двадцать пять с лишним лет я программирую, преподаю, пишу книги. В 2003-м году появился в сети мой сайт Ассемблер и не только (http://asm.shadrinsk.net). Сайт был посвящен в основном программированию на языке ассемблера.
В прошлом году я полностью переделал сайт, однако чувство неудовлетворенности не оставляет меня. Дело в том, что на сайте отсутствует форум и блог. Времени у меня слишком мало, чтобы разрабатывать самому, а чужими продуктами пользоваться не хочется. С другой стороны есть настоятельная необходимость некоторого общения с читателями. На сайт присылаются вопросы, ответы на которые могли бы быть интересны и другим любителям программирования. Я подумал, что ЖЖ это идеальная площадка для подобного общения. Ну, по крайнй мере, пока у меня на сайте не заработает свой блог.
Мой блог посвящен только темам, так или иначе связанным с программированием и информационными технологиями. В нем не будут обсуждаться другие вопросы нашей жизни, которые меня, естественно интересуют (философия, искусство и т.д.).

  • 1
Доброго Вам здравия! :)
Честно сказать не понял только где можно задать вопрос, задам его здесь.
Читая ваши книги "Ассемблер для Windows", в том числе и последнюю (4-ое издание) так и не нашел более подробного описания команды процессора ENTER par1, par2 ... в частности, что такое par1 и par2?
В книге написано, что она подготавливает стек... к чему?
Поигравшись в отладчике с ней.. явно понял, что смещает стек...
Хотелось бы более конкретного описания ее применения и примера кода с ней...
Заранее спасибо за ответ.
С уважением... :)

Добрый день. На моем сайте http://asm.shadrinsk.net можно задавать вопросы. Но здесь даже лучше.
По поводу команды enter n,m. Надо сказать, что она используется компиляторами чрезвычайно редко, из-за ее медлительности. Обычно m полагают равным 0. m - это уровень вложенности. Например, в Паскале можно определять вложенные процедуры. В Си же уровень вложенности всегда 0.
Как же это работает. Команда enter n,m эквивалентна последовательности
push ebp
mov ebp,esp
sub esp,(n+4*m)
Таким образом, в стеке выделяется место (кадр), где можно хранить локальные переменные, плюс указатели на кадры вложенной процедуры более высокого уровня (это m). Имея указатель на кадры вложенных процедур более высокого уровня, мы получаем доступ к их локальным переменным, как и должно быть, например, в языке Паскаль.

Команда leave возвращает стек в исходное состояние, т.е. выполняет две команды:
mov esp,ebp
pop ebp

Всего доброго, пишите, если, что не понятно. Всегда рад пообщаться, с уважением Пирогов В.Ю.

(Deleted comment)
Спасибо вам. Заходите на мой сайт. Сейчас готовится книжка по asm-64. Мне кажется очень полезная и интересная.

С уважением, Пирогов В.Ю.

Все Ваши книги очень интересные и полезные.
Это мои настольные книги.
Возможно спросить Вас еще про один момент.
Собственно написал я сервис. Его задача - это запускать консольную программу при запуске системы и контролировать каждую минуту (Sleep) запущена она или нет. Если нет, то сервис вновь запускает программу.
Для выявления отсутствия программы в памяти я попробовал использовать CreateMutex. Т.е. консольная программа создает мутекс. Но в рамках сервиса не работает. Т.е. даже когда я принудительно завершаю процесс консольной программы перезапуска не происходит.
Возможно я не те семафоры использую? Подскажите пожалуйста как сделать правильно.

Сходу ответить не могу, что-то, наверное, уже забыл. Насколько я помню, при запуске программы вы создаете процесс. Этот процесс для вас не потерян. МОжно отслеживать, когда этот процесс закончит работу. Я подробнее об этом посмотрю. Кажется, даже у меня в книжке это есть. Вряд ли то, что это сервис, как то может повлиять на результат.

Спасибо за внимание.
Очень признателен.
Не ожидал такого быстрого ответа)

P.S. С нетерпением жду ответа.
Заранее ОГРОМНОЕ спасибо.

P.P.S. Решил проблему. Все оказалось просто до безобразия.))
Короче, если я создаю процесс значит у меня есть его хендл.
Т.е. я могу задействовать WaitForSingleObject и ждать его закрытия а потом перезапустить его.
И выкинуть нафиг все слипы и т.д.

Edited at 2013-12-25 08:55 am (UTC)

Здравствуйте уважаемый Владислав Юрьевич!

Надеюсь, я не достаю своими мессаджами?
В общем, возникла у меня необходимость кодинга под х64.
Т.к. я пишу практически всегда на масм, стал искать итнклюды и макросы под масмХ64
Честно сказать, то что нашел надо допиливать и т.д. и т.п.
Хотел Вас спросить, может есть у вас готовая рабочая сборка масмХ64?
Был бы очень признателен, если б Вы поделились ей..
Заранее огромное спасибо.
мой мыл - onlyone.rnd@gmail.com

P.S. На фасме не пишу.. душой прикипел к масму)

Edited at 2014-01-05 10:15 am (UTC)

Нет, готовой сборки нет. Хотя на основе Visual Studio, я как-то собирал 64-битовые асм-приложения. Но до конца так и не разобрался, хотя результат был. Сейчас предпочитаю fasm.

Все. Перелез на фасм.)
Хотел еще спросить. У вас нес случайно примера кода под х64 на фасме простенького сервиса? Если не сложно скиньте плиз. Парировал свой код с х86.. но не работает. Пример рабочего кода пригодился бы, чтобы разобраться в своих ошибках.
Заранее премного благодарен!

Примера сервиса на fasm нет. Но собираюсь писать.

  • 1
?

Log in

No account? Create an account