Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2010, 22:20   #21
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну вообще то это уже контекст не вашего процесса, так как ваш код вызывается загрузчиком, а не сам по себе работать начинает
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.06.2010, 04:07   #22
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
Сообщение от coinkrsk
Тест от ||.
я не знаю о чем вы
Цитата:
Код:
 .386
 .model flat,stdcall
 .code
start:
RETN
end start
А отладчик все равно не верит. см. вложение.
а среди импортируемых dll в создавшемся EXE есть упоминание об kernel32.dll?
Mikl___ вне форума Ответить с цитированием
Старый 22.06.2010, 09:21   #23
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
среди импортируемых dll в создавшемся EXE есть упоминание об kernel32.dll?
По поводу этого. Просветите как проверить. Инклудов у меня нет. Даже путей до библиотек не прописывал. Но смутила работа IDA pro. Не пользовался такими вещами никогда. При просмотре команды RETN попадаем на вложенную в предыдущем сообщении картинку. Что оно значит?

Собиралось так:
Код:
d:\masm32\bin\ml /c /coff /Cp minimal.asm
d:\masm32\bin\link /SUBSYSTEM:CONSOLE minimal.obj
coinkrsk вне форума Ответить с цитированием
Старый 22.06.2010, 09:53   #24
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

coinkrsk
раз уж занялись подобными вещами то без hiew32 не обойтись, а если без hiew32, то загляните внутрь собранного EXE хотя бы через FAR или NORTON COMANDER и нажмите F3 и поиском постарайтесь найти kernel32.dll или advapi32.dll если их там нет -- значит функции оттуда не импортируются
Mikl___ вне форума Ответить с цитированием
Старый 22.06.2010, 18:28   #25
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
ну вообще то это уже контекст не вашего процесса, так как ваш код вызывается загрузчиком, а не сам по себе работать начинает
Можно немного подробнее, дабы уяснить раз и навсегда? Библиотеки нет ни в коде, ни в инклудах. В .exe тоже упоминания нет, однако если отладчиком зайти в RETN то увидим:
Код:
call    kernel32!ExitThread (7c80c0e8)
Пара дней страданий привели к такое картине понимания механизма запуска приложения:
Я вызваю даблкликом MyAppication.exe из explorera что само по себе есть CreateProcess - API функция из kernel32.dll, которая создает окружение и первичный поток и запускает его через мою точку входа - WinMain. Далее работает мое приложение и по команде RETN закрывает созданный для него поток, что вызвает ExitProcess и окончательно завершает работу. Но ведь ExitThread вызываемый по команде RETN, что тоже есть API функция из kernel32.dll. Как так получается, я ведь не могу иметь на нее указатель без подключенной библиотеки? Как тогда может вообще корректно завершаться поток? Мое приложение просто отдает бразды правления наверх и уже вызванный процесс сам вызвает свое завершение? По какой команде это происходит?
coinkrsk вне форума Ответить с цитированием
Старый 22.06.2010, 18:56   #26
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

CreateProcess->CreateThread(точка начала которого и есть ваша точка входа)->Application->Retn(возрат производится в kernel32)->ExitThread(завершается поток вашего приложения)
то есть ваше приложение использует kernel32 не явно, а если быть точным то именно за счет kernel32 ваше приложение и запустилось.
kernel32 присутствует в памяти вашего процесса.

Цитата:
Как так получается, я ведь не могу иметь на нее указатель без подключенной библиотеки? Как тогда может вообще корректно завершаться поток?
а вы и не имеете, ведь не в вашем контектсе происходит вызов.
вы лишь делаете возврат обратно в Kernel32 который затем корректно завершает процесс

можно сказать так, что kernel32 делает call вашему процессу(точнее по адресу точки входа) и потом вы обратно возвращаетесь.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.06.2010, 11:14   #27
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

Итак, некая картина мира в моей голове сложилась, за что всем спасибо и отдельно Пепел Феникса. Можно двигаться дальше
/me ушел воевать с отдалчиком
coinkrsk вне форума Ответить с цитированием
Старый 24.06.2010, 22:57   #28
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

За ликвидацию моей безграмотности всем спасибо
Изображения
Тип файла: jpg HelloWorld.JPG (2.4 Кб, 20 просмотров)
coinkrsk вне форума Ответить с цитированием
Старый 25.06.2010, 04:01   #29
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

coinkrsk
Коли уж решение вами найдено, было бы хорошо, если бы вы объяснили как эта проблема была решена
Mikl___ вне форума Ответить с цитированием
Старый 25.06.2010, 11:02   #30
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

Решилось вызовом CsrClientCallServer из ntdll.dll.
coinkrsk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IPHLPAPI.DLL в windows 7 Horus92 Работа с сетью в Delphi 1 15.06.2010 09:55
bass.dll в windows 7 Virus191288 Мультимедиа в Delphi 7 27.11.2009 07:48
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
Как убрать маскировку пароля без dll?? techner Win Api 4 20.04.2007 20:10