|
|
|
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Я начинающий компиляторописака. С чего начинать создание приложения на ASM и в опкоде и изучение вопроса? Надо ли вообще раскладывать регистры по сегментам и как? Как это выглядит в коде исполняемого файла? Каким образом возвращается значение при завершении приложения? Как получить доступ к параметрам функции
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
Начнем с того что это не так. main - это библиотечная функция, которая вызывается после всяких инициализаций. Консольный ввод/вывод так же выполняется библиотечными функциями обертками, которые в свою очередь могут использовать WinAPi. С такими вопросами тебе рановато "компиляторописательством" заниматься ИМХО. Добавлено через 9 минут и 43 секунды http://board.flatassembler.net/topic.php?t=3437 Это сообщение отредактировал(а) _zorn_ - 3.9.2013, 10:12 |
|||
|
||||
bems |
|
||||||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
с точки зрения прикладного процесса - вызовами API ReadFile/WriteFile
-------------------- Обижено школьников: 8 |
||||||
|
|||||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Бред. Автор консольной проги функцию main пишет сам.
Это сообщение отредактировал(а) ТарасАтавин - 4.9.2013, 08:11 -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
Бред. Автор консольной проги НА АСМЕ может назначить точку входа куда угодно, даже не на функцию. И почитайте про PE формат хотя бы. |
|||
|
||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Возможно это так на низком уровне c++-программы. Но если нет глобальных объектов, то первая явная (прописанная на высоком уровне) операция находится в main, отсюда иное понимание точки входа у крестанутых. Хорошо, пусть на самом деле это не так. А что отвечает за инициализации? Система? Или ещё одна подпрограмма приложения? В первом случае точка входа всё таки в main и к разрабатываемому компилятору это относится вне зависимости от наличия глобальных объектов, так как вызов глобальных конструкторов он, в отличие от компиляторов c++, должен неявно добавить в main. А во втором случае на что она вообще похожа?
Добавлено через 3 минуты и 10 секунд А на уровне операций это как выглядит? Специфично ли это именно для c/c++? А на паскале как возвращается значение? -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
В прошлый раз не правильно выразился. main - функция вызываемая ИЗ библиотечных функций инициализации. Которые в свою очередь и подготавливают параметры для main.
|
|||
|
||||
ТарасАтавин |
|
||||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Добавлено через 1 минуту и 46 секунд
-------------------- Не так всё плохо, как оно есть на самом деле. |
||||
|
|||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
||||
|
||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Добавлено через 46 секунд А где бы почитать описание формата заголовка PE? Добавлено через 1 минуту и 54 секунды Что это? -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
||||
|
||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
И регистры по сегментам надо раскладывать?
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
Что что ? Начни с простого http://ru.wikipedia.org/wiki/Portable_Executable IDA - https://www.hex-rays.com/products/ida/suppo...load_demo.shtml Понадобится для х64 (полная), сам найдёш. |
|||
|
||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
Батенька, да вам пока еще из msdn рано вылазить.
А так на вскидку первое что пришло в голову. http://msdn.microsoft.com/en-us/library/wi...v=vs.85%29.aspx Добавлено через 9 минут и 26 секунд Для вызова функции есть секция импорта (читай про PE формат, БЛДЖАД) А на остальные вопросы, есть такое страшное словосочетание - конвенция вызовов |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
как на уровне oпераций выглядит передача параметра в функцию зависит от конвенции вызова. на х64 используется регистр, место в стеке всё равно резервируется (с выравниванием) и делается call
и на паскале ExitProcess потому что win api един стандартный вводной поток в винде это тоже "файл". он может совпадать с CON а может и не совпадать http://msdn.microsoft.com/en-us/windows/hardware/gg463119.aspx ты бы для начала написал компилятор какого-нить простого языка, хоть бы бейсика, для опыта. а то с плюсами ты завязнешь на 15 лет, и так ничего и не сделаешь Это сообщение отредактировал(а) bems - 4.9.2013, 11:18 -------------------- Обижено школьников: 8 |
|||
|
||||
LeonidPr |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2012 Где: г. Чебоксары Репутация: 1 Всего: 1 |
Разложу ваши вопросы, которые вы задали в первом посте в куче по пунктам и попробую ответить
1. Начинать с написания кода на языке ассемблер как ни странно. В опкодах писать не советую- ибо тяжко (на то компиляторы/ассемблеры и нужны). Изучение начинать с курса по компиляторам (на Intuit вроде есть), книг по компиляторам, этапов компиляции (Лексический анализ, синтаксический анализ, кодогенерация+оптимизация) книга Дракона вам в руки + статьи по этому делу 2. Регистры по сегментам??? вы о чем? адресное пространство вроде как плоское... 3. Читайте доки по формату PE, там все разжевано (книжка есть Исследование программ Win32 до дизассемблера и отладчика 4. Отвечали уже - в параметре ExitProcess 5. В стеке лежат 6. В ассемблере end <точка входа> в конце .asm файла, в коде - см п.3 7. для Win 64 не программировал, но думаю, что вряд ли сильно отличается от Win32 - ESP и push/pop 8. MSDN 9.Нет. Если вы создаете DLL там есть секция экспорта --------------------
pkunzip.zip |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
ну там нет "цепочки ebp" ввод-вывод может быть перенаправлен, нельзя предполагать что стандартный вывод это всегда консоль -------------------- Обижено школьников: 8 |
|||
|
||||
LeonidPr |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2012 Где: г. Чебоксары Репутация: 1 Всего: 1 |
Буду знать, спасибо.
Согласен. Просто вопрос был именно про консоль. --------------------
pkunzip.zip |
|||
|
||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Ну как в досе: сегмент, зовут его так то, регистр у него такой то.
Добавлено через 5 минут и 44 секунды
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
В винде плоское адресное пространство.
Исполняемый файл организован не в сегменты а в секции, адреса которых не должны быть в регистрах. Сегментные регистры используются, но подругому -------------------- Обижено школьников: 8 |
|||
|
||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
да http://msdn.microsoft.com/en-us/library/wi...v=vs.85%29.aspx
и push на х32, а на х64 другая конвенция вызова http://blogs.msdn.com/b/oldnewthing/archiv...1/14/58579.aspx -------------------- Обижено школьников: 8 |
|||
|
||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Это сообщение отредактировал(а) ТарасАтавин - 7.9.2013, 13:48 -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
-------------------- Обижено школьников: 8 |
|||
|
||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Я вообще не собираюсь писать ещё один компилятор плюсов.
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
ну напиши Паскаля Добавлено через 16 секунд окей -------------------- Обижено школьников: 8 |
|||
|
||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
я одним даже компилил. Но почему то в отличие от паскаля/C/C++ для него всё таки исконно преобладали интерпретаторы. Не потому ли, что сложно компилить язык, с объявлением переменной при первом присваивании, чудным присваиванием через LET, с зависимостью типа переменной от её имени и тому подобными дебрями?
Добавлено @ 13:54 Я на Вирата похож? Добавлено через 3 минуты Как? И надо ли их куда то назначать и что то в них загружать? Это сообщение отредактировал(а) ТарасАтавин - 7.9.2013, 13:54 -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
это не влияет на то как это компилировать, просто особенности синтаксиса
на самом деле ты похож на излишне деятельного подростка. вопросы которые ты задаешь ясно показывают что гонору у тебя больше чем знаний. Добавлено через 6 минут и 40 секунд например в х32 регистр FS указывает на TIB, соответственно используется при установке SEH-фреймов, работе с tls и тд -------------------- Обижено школьников: 8 |
|||
|
||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
профильных - да вот что на предложение про гонор ты ответишь у меня сомнений небыло. ты бы так рьяно отвечал в тематическом диалоге. например о том что stdout != консоль. или вот в этой теме http://forum.vingrad.ru/forum/topic-371647.html -------------------- Обижено школьников: 8 |
|||
|
||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
А ничего, что по теме я сам назвался новичком? Но у меня достаточно знаний, чтоб самостоятельно сочинить хотябы задачу, в том числе, по теме. А способность разобраться, чтоб сделать хоть что то, у к.т.н. вряд ли может отсутствовать. Вот во времени может быть вопрос. Но я где то называл сроки?
Это сообщение отредактировал(а) ТарасАтавин - 7.9.2013, 14:50 -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
Тарас, это снова ответ не на профильную реплику
ЧТД -------------------- Обижено школьников: 8 |
|||
|
||||
Правила форума "Asm для Windows/DOS" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для Windows/Dos | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |