| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > Чужой код. |
| Автор: try_to_get 15.8.2007, 16:39 | ||
После директивы .code вызывается процедура ExitProcess, по идеи программа должна завершиться, и прекратить работу, но после, подключаются части кода программы и программа продолжает работать. Почему автор решил в начале завершить программу, какой смысл в этом? Или я не так понял?! |
| Автор: Severyanin 16.8.2007, 08:26 |
| Скорее всего, разгадка кроется в тех модулях, которые подключаются потом. Не могли бы вы их код тоже выложить. А то интересно |
| Автор: ksili 16.8.2007, 08:42 |
| А то, что ExitProcess расположен до метки start, ничего? На него точно управление приходит? (я вообще-то в этом не рублю) |
| Автор: try_to_get 16.8.2007, 09:01 | ||
| Severyanin А тему не закроют? Добавлено через 11 минут и 39 секунд Вот, вот нашел
Но все равно не понятно?! Добавлено через 13 минут и 50 секунд Кто поможет, получит плюсики. |
| Автор: MAKCim 16.8.2007, 10:17 |
ну судя по цитате где-то в коде должен быть вызов ExitProcess() а т. к он (вызов) по сути нужен только фиктивно, поэтому мы помещаем его в такое место, откуда он не может быть сделан, т. е до start |
| Автор: Severyanin 16.8.2007, 10:19 |
| А я думаю, что этот вызов был нужен для корректного завершения потока, вызвавшего даную программу. Сначала закрываем его, а потом - переходим на основной цикл. Я так думаю |
| Автор: ksili 16.8.2007, 10:29 |
| По-моему, MAKCim, прав. ExitProcess'у же вроде должен быть передан хэндл процесса. А там ноль. Так что она я думаю не вызывается, а находится там фиктивно. |
| Автор: Severyanin 16.8.2007, 10:33 |
| Нет, это не хэндл, а признак успешного завершения. Первым аргументом ему передается код ошибки |
| Автор: try_to_get 16.8.2007, 11:01 | ||
Да, есть. Все я понял, загрузчик не мог найти правильного выхода в программе ret или тот же ExitProcess, и ExitProcess был помещен в .code, но только не понятно почему процессор не завершает программу или код работает только в метке start: .... end start А сам выход осуществляется очень интересным способом: значит в данных есть dd 0D66358ECh ; ExitProcess Таблица хешей пока точно не разбирался в этом. дальше есть переменная _ExitProcess equ dword ptr [ebp-4*12] автор не хотел давать знать что он использует kernel32? тому кто будет дизасемб. его прогу Поправите меня если я ошибся... |
| Автор: Severyanin 16.8.2007, 11:20 | ||||
Да. Это то же самое. что main{}.
Это дамп вызова этой самой ExitProcess без ошибки. |
| Автор: try_to_get 16.8.2007, 15:42 |
| Как и обещал MAKCim +1 Severyanin +1 ksili +1 |
| Автор: Severyanin 17.8.2007, 13:02 |
| Спасибо |
| Автор: ksili 17.8.2007, 13:04 |
| Ух-ты! и мне чо ли? Вот Severyanin реально заслужил |
| Автор: try_to_get 17.8.2007, 18:10 | ||
Отнять? |