powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Нужно кое-что прояснить.
25 сообщений из 29, страница 1 из 2
Нужно кое-что прояснить.
    #37318943
Фотография Esofter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не до конца понимаю работу процессов в ОС Виндовс.

Вот есть у нас ехе файл, который можно запустить на выполнение.

Что происходит когда мы запускаем его? - ОС инициализирует новый процесс(создает контекст процесса) и загружает содержимое файла в сегмент кода процесса.

Известно что оперативная память делится на сегменты кода, данных и стека. Получается что на каждый процесс создаются эти сегменты.

Не ясно каким образом инициализируется сегмент данных. Не ясно как именно код начинает выполнятся, вот есть точка входа(функция мейн) с точки зрения сорцов с ней все ясно, а вот что означает точка входа в контексте выполнения процесса - мрак.

Теперь про стек. Я так понимаю в стек грузится код из сегмента кода, правильно? Но тут у меня путаница со стеком CLR, который содержит данные...

В общем хочу разложить по полочкам работу процессов в виндовсе, экстраполируя это все на CLR

Кому не лень побеседовать на эту тему?
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37318964
Фотография mccc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EsofterНе до конца понимаю работу процессов в ОС Виндовс.

Вот есть у нас ехе файл, который можно запустить на выполнение.

Что происходит когда мы запускаем его? - ОС инициализирует новый процесс(создает контекст процесса) и загружает содержимое файла в сегмент кода процесса.

Известно что оперативная память делится на сегменты кода, данных и стека. Получается что на каждый процесс создаются эти сегменты.

Не ясно каким образом инициализируется сегмент данных. Не ясно как именно код начинает выполнятся, вот есть точка входа(функция мейн) с точки зрения сорцов с ней все ясно, а вот что означает точка входа в контексте выполнения процесса - мрак.

Теперь про стек. Я так понимаю в стек грузится код из сегмента кода, правильно? Но тут у меня путаница со стеком CLR, который содержит данные...

В общем хочу разложить по полочкам работу процессов в виндовсе, экстраполируя это все на CLR

Кому не лень побеседовать на эту тему?
лень кончно. освой asm(лично я осваивал через AFD. переход ЕС-Intel)
, хотяб под дос. там все увидишь(16-разряд более понятнее, ). ну и есть прекрасный нелр от Нортона, с расширением .ng
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37318967
Фотография Esofter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в принципе можно и книгу почитать
например эту



хотя вроде как Рихтер тоже что-то писал в этом роде
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37318971
Фотография mccc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Esofterв принципе можно и книгу почитать
например эту



хотя вроде как Рихтер тоже что-то писал в этом роде
вот здесь, ты не получишь ответа на
>>>
Известно что оперативная память делится на сегменты кода, данных и стека. Получается что на каждый процесс создаются эти сегменты.

Не ясно каким образом инициализируется сегмент данных. Не ясно как именно код начинает выполнятся, вот есть точка входа(функция мейн) с точки зрения сорцов с ней все ясно, а вот что означает точка входа в контексте выполнения процесса - мрак.

Теперь про стек. Я так понимаю в стек грузится код из сегмента кода, правильно? Но тут у меня путаница со стеком CLR, который содержит данные...
<<<
выделенному, хехе
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37318976
Фотография Esofter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcccвыделенному, хехе

ну я ж говорю что экстраполировался на стек CLR, а именно стек вызовов. Возможно я что-то путаю, но я сюда и пришел за просветлением :)
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37318983
Фотография mccc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Esoftermcccвыделенному, хехе

ну я ж говорю что экстраполировался на стек CLR, а именно стек вызовов. Возможно я что-то путаю, но я сюда и пришел за просветлением :)
изначально, из твоих, я понял, тебе интересен стык железо-программа. а CLR..., тут копать и копать(скажем, a++, в естестенном коде займет 2 байта, а посмотришь CLR, там ~60-100б).
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37318984
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Esofter
Известно что оперативная память делится на сегменты кода, данных и стека. Получается что на каждый процесс создаются эти сегменты.

не известно.

EsofterНе ясно каким образом инициализируется сегмент данных.

копируется с исполняемого файла, побайтно тютелька в тютельку.


EsofterНе ясно как именно код начинает выполнятся, вот есть точка входа(функция мейн) с точки зрения сорцов с ней все ясно, а вот что означает точка входа в контексте выполнения процесса - мрак.

у процессора есть указатель текущей команды, вот он и выставляется на адрес первой инструкции ф-и майн.

EsofterТеперь про стек. Я так понимаю в стек грузится код из сегмента кода, правильно? Но тут у меня путаница со стеком CLR, который содержит данные...

неправильно ты понимаешь.
со стеком мы работаем в момент выполнения программы посредством инструкций
push, pop, call, ret.

EsofterВ общем хочу разложить по полочкам работу процессов в виндовсе, экстраполируя это все на CLR

увы, но я не знаю как CLR.
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37318986
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Esoftermcccвыделенному, хехе

ну я ж говорю что экстраполировался на стек CLR, а именно стек вызовов. Возможно я что-то путаю, но я сюда и пришел за просветлением :)
при вызове ф-и, в стек заносятся локальные переменные и адрес возврата, но еще стеком можно пользоваться для хранения промежуточных результатов вычисления.
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37318987
Фотография Esofter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote ZyK_BotaN]Esofterнеправильно ты понимаешь.
со стеком мы работаем в момент выполнения программы посредством инструкций
push, pop, call, ret.

ну так а что ложится-то в стек? Инструкции?
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37318989
Фотография Esofter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNEsofterпропущено...


ну я ж говорю что экстраполировался на стек CLR, а именно стек вызовов. Возможно я что-то путаю, но я сюда и пришел за просветлением :)
при вызове ф-и, в стек заносятся локальные переменные и адрес возврата, но еще стеком можно пользоваться для хранения промежуточных результатов вычисления.

то есть стек вызовов - это просто цепочка адресов возврата?
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37318991
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EsofterИзвестно что оперативная память делится на сегменты кода, данных и стека. Получается что на каждый процесс создаются эти сегменты.

это деление происходит не в оперативке а в процессоре:
есть сегменты данных, стека, кода и еще один(ds, ss, cs, es).

все эти регистры могут указывать на один и тот же адрес.
так делается например в досовских .com-ах.
стек работает от старших адресов, поэтому он не мешает сегменту данных и кода, ну пока не переполнится.
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37318992
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Esofter]ZyK_BotaNпропущено...


ну так а что ложится-то в стек? Инструкции?

нет. данные.
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37318994
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EsofterZyK_BotaNпропущено...

при вызове ф-и, в стек заносятся локальные переменные и адрес возврата, но еще стеком можно пользоваться для хранения промежуточных результатов вычисления.

то есть стек вызовов - это просто цепочка адресов возврата?

нет стека вызовов, есть просто стек, поэтому там не только адреса возврата, но и локальные переменные, да и любые данные которые тебе вздумалось хранить.
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37318996
Фотография Esofter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNEsofterИзвестно что оперативная память делится на сегменты кода, данных и стека. Получается что на каждый процесс создаются эти сегменты.

это деление происходит не в оперативке а в процессоре:
есть сегменты данных, стека, кода и еще один(ds, ss, cs, es).

все эти регистры могут указывать на один и тот же адрес.
так делается например в досовских .com-ах.
стек работает от старших адресов, поэтому он не мешает сегменту данных и кода, ну пока не переполнится.

то есть адреса инструкций заносятся в свои регистры, а адреса данных в свои?
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37318998
Фотография Esofter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по поводу функции мейн тут не все так просто. Я как-то видел тут один мембер описывал что происходит на самом деле. Но уже подзабыл. Про мембера знаю что он тусуется в ветке С++ и что он с Одессы...
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37318999
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EsofterZyK_BotaNпропущено...

это деление происходит не в оперативке а в процессоре:
есть сегменты данных, стека, кода и еще один(ds, ss, cs, es).

все эти регистры могут указывать на один и тот же адрес.
так делается например в досовских .com-ах.
стек работает от старших адресов, поэтому он не мешает сегменту данных и кода, ну пока не переполнится.

то есть адреса инструкций заносятся в свои регистры, а адреса данных в свои?

не совсем.
есть прост регистры ds, ss, cs,es, которые указывают на начало сегментов, но в реале можна работать с данными не пребегая к ds или es.

я уже привел приме .com, емнип все сегменты указывают на один и тот же адрес, поэтому максимальный размер программы 65 кб.
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37319004
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Esofterпо поводу функции мейн тут не все так просто. Я как-то видел тут один мембер описывал что происходит на самом деле. Но уже подзабыл. Про мембера знаю что он тусуется в ветке С++ и что он с Одессы...

а что не просто? подготовка аргументо? или что?

я просто сказал тебе как указывается начало выполнения программы.
просто адрес 1-й инструкции записывается в указатель текущей инструкции.
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37319005
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, в защищенном режиме все выглядит немного сложнее ))
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37319009
Фотография Esofter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNEsofterпропущено...


то есть адреса инструкций заносятся в свои регистры, а адреса данных в свои?

не совсем.
есть прост регистры ds, ss, cs,es, которые указывают на начало сегментов, но в реале можна работать с данными не пребегая к ds или es.

я уже привел приме .com, емнип все сегменты указывают на один и тот же адрес, поэтому максимальный размер программы 65 кб.

кажется вспомнил

ds - data segment
ss - stack segment
cs - code segment

по-моему был какой-то регистр di, которым задавалось то ли смещение в сегменте то ли что...

А вот по поводу 65 Кб чет ничего сказать не могу... Откуда дровишки и как это обходится?
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37319013
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EsofterZyK_BotaNпропущено...


не совсем.
есть прост регистры ds, ss, cs,es, которые указывают на начало сегментов, но в реале можна работать с данными не пребегая к ds или es.

я уже привел приме .com, емнип все сегменты указывают на один и тот же адрес, поэтому максимальный размер программы 65 кб.

кажется вспомнил

ds - data segment
ss - stack segment
cs - code segment

по-моему был какой-то регистр di, которым задавалось то ли смещение в сегменте то ли что...

А вот по поводу 65 Кб чет ничего сказать не могу... Откуда дровишки и как это обходится?

64 кб. это для 16-разрядного доса так было для .com-ов.
просто 16-разрядный сегмент - 64 кб, а отличие кома от экз, что сегмент только один.

а терь про di, там не только был di но и si, но и без них можно было обходится.
di - место назначения
si - источник
но все эти названия условны.


Как обходится, а зачем это обходить в эру виндовза и дотНета? ))
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37319103
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNя уже привел приме .com, емнип все сегменты указывают на один и тот же адрес, поэтому максимальный размер программы 65 кб.Изменяет тебе память, изменяет.
Во первых, DOS для .com устанавливала только CS и SS, a DS и ES на момент старта программы оставались в случайном состоянии. Их надо было ставить самому (push cs/pop ds).
Во вторых, никто не запрещал задавать новые значения для сегментных регистров (включая CS через long jump).
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37319545
Фотография Esofter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гляньте еще раз, правильно ли я понимаю. Каждый из сегментных регистров содержит адрес начала соответственного сегмента в ОП. С помощью индексных регистров задается смещение и таким образом мы попадаем в нужное место
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37319919
Фотография mccc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37320706
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВо вторых, никто не запрещал задавать новые значения для сегментных регистров (включая CS через long jump).

динамически задавать - да.
но статически размер ком-файла разве мог превышать 64 кб?
...
Рейтинг: 0 / 0
Нужно кое-что прояснить.
    #37320733
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot White Owl]ZyK_BotaN(включая CS через long jump).
При определённых условиях это могло привести к ошибке. В отличие от retf/iret...

ZyK_BotaNно статически размер ком-файла разве мог превышать 64 кб?
Запросто. Вот только загружалось при этом (в зависимости от версии) либо 64 кб, либо (size mod 64k)... а в первом случае "хвост" ещё и частично и непредсказуемо разрушался, ибо регистры стека указывали именно туда.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Нужно кое-что прояснить.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]