nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 21 Nov 2018 03:59



Reply to topic  [ 40 posts ]  Go to page Previous  1, 2, 3
i8080 help. 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
HardWareMan wrote:
Один из придурков придумал загружать вполне нормальный сегментный регистр [BP] (Base Pointer) значением стекового регистра [SP] (Stack Pointer) и начал передавать параметры в стеке. Остальные подхватили и теперь, спустя 40 лет, мы имеем фундаментальную уязвимость в порче стека, потому как все нынешние компиляторы используют этот прием. А использовали бы [BP] по назначению, разделив область данных и кода, и не было бы проблем и технологии DEP.

Ну да - ты Дон Кихот, весь в белом... а все остальные... хм... - гомосексуалисты (мягко скажем).
И чего они тебя, "придурки", не спросили 40 лет назад? Да сейчас как-то в твоих советах не нуждаются...

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

Ты ведь пользуешься своими самодельными компиляторами, Хардушечка, которые
ну никак не "доставляют", да?

_________________
iLavr


Last edited by Lavr on 20 May 2013 11:06, edited 1 time in total.



20 May 2013 11:03
Profile
Banned
User avatar

Joined: 20 Mar 2005 14:41
Posts: 2150
Location: От туда
Reply with quote
Post 
Ну вот теперь можно определенно сказать, что у тебя есть свой говнокомпилятор с говнометодом и теперь тебя жаба душит, что ты не смог сделать правильно и пошел по стопам ушлепков из 70х. Я ничего не пропустил, да Лаврушка? Давай, подсыпь еще.


20 May 2013 11:06
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
HardWareMan wrote:
Давай, подсыпь еще.

А зачем? Из тебя добро и так хлещет... я с улыбкой молча за тобой понаблюдаю... :wink:

Я давно обратил внимание на твою приверженность к экскрементам и их источнику.
Но это не мои аргументы в дискуссии... может они админу кажутся достойными
технического форума терминами... :-?

_________________
iLavr


20 May 2013 11:13
Profile
Retired

Joined: 27 Mar 2013 05:55
Posts: 588
Location: 62.192.229.16
Reply with quote
Post 
HardWareMan wrote:
Один из придурков придумал загружать вполне нормальный сегментный регистр [BP] (Base Pointer) значением стекового регистра [SP] (Stack Pointer) и начал передавать параметры в стеке.


Я думаю, что этот же "придурок" придумал и регистр BP.

BP по умолчанию адресуется в сегменте стека (SS), а адресации по SP просто не было. К тому же было две команды enter, leave, которые изменяли SP, BP.


20 May 2013 11:21
Profile
Banned
User avatar

Joined: 20 Mar 2005 14:41
Posts: 2150
Location: От туда
Reply with quote
Post 
vinxru wrote:
HardWareMan wrote:
Один из придурков придумал загружать вполне нормальный сегментный регистр [BP] (Base Pointer) значением стекового регистра [SP] (Stack Pointer) и начал передавать параметры в стеке.


Я думаю, что этот же "придурок" придумал и регистр BP.

BP по умолчанию адресуется в сегменте стека (SS), а адресации по SP просто не было. К тому же было две команды enter, leave, которые изменяли SP, BP.

Не поленился и расчехлил Зубкова.
Quote:
Команда: ENTER размер, уровень
Назначение: Вход в процедуру
Процессор: 80186

Команда ENTER создает стековый кадр заданного размера и уровня вложенности (оба операнда — числа; уровень вложенности может принимать значения только от 0 до 31) для вызова процедуры, использующей динамическое распределение памяти в стеке для своих локальных переменных.

Команда: LEAVE
Назначение: Выход из процедуры
Процессор: 80186

Команда LEAVE выполняет действия, обратные команде ENTER. Фактически эта команда только копирует содержимое ЕВР в ESP, тем самым выбрасывая из стека весь кадр, созданный последней выполненной командой ENTER, и считывает из стека ЕВР для предыдущей процедуры, что одновременно восстанавливает и значение, которое имел ESP до вызова последней команды ENTER.

А [BP] был еще в 8086. Т.е., это аппаратчики пошли на поводу у нердов-ушлепков, именовавших себя программистами, и сделали для их удобства 2 новые команды. Что мешало распиливать кучу для локальных переменных? Ведь тогда данные были бы далеко от кода и в случае порчи программа бы не передавала управление на данные, чем сейчас так пользуются вирусы, вызывая "переполнение буфера", которое заложено фундаментально в архитектуру.


20 May 2013 11:32
Profile
Retired

Joined: 27 Mar 2013 05:55
Posts: 588
Location: 62.192.229.16
Reply with quote
Post 
Кстати этими командами почти никто не пользовался. Я точных причин не знаю.


20 May 2013 12:11
Profile
Junior

Joined: 19 May 2013 14:05
Posts: 3
Location: 85.234.168.94
Reply with quote
Post 
Спасибо всем огромнейшее. Буду теперь сидеть и разбираться. :D


20 May 2013 14:05
Profile
Retired
User avatar

Joined: 25 Jul 2011 01:14
Posts: 1337
Location: WWW
Reply with quote
Post 
куясе вы тут настрочили :o

Quote:
Если возражений по качеству перевода нет, то я на минуту соглашаюсь
с твоей точкой зрения:
выполнив операцию XTHL - я забрал в HL вершину стека - так ведь?

Quote:
Exchange stack top with H and L

То есть stack top - у меня теперь находится в HL!

А что тогда находится там, куда я содержимое HL положил, а?
Ну там, куда регистр SP по прежнему указывает?

HardWareMan wrote:
Вершиной стека называют именно последний элемент в куче,...

Но я ведь следуя твоей логике забрал его в HL - разве нет?
Теперь у нас образовалось два stack top - один лежит в HL, а другой - "именно
последний элемент в куче"?


Ну так значит подмена понятий есть, и она вот в этой фразе:
Exchange stack top with H and L

Не обмен "вершины стека" (stack top), а обмен "содержимого вершины стека" здесь.
Потому как дальше - объяснение совершенно верное: везде упоминается "content",
что, собственно, и есть "содержимое" или "значение".


даже не знаю, смеяться или плакать :-?

2Maks, nedopc.org весело и вкусно.


20 May 2013 16:57
Profile
Doomed

Joined: 25 Aug 2009 08:02
Posts: 361
Location: Москва
Reply with quote
Post 
Lavr wrote:
Mixa64 wrote:
Согласен, задача дурная. Стек сущность безадресная, записать в стек по адресу - фраза странная.

Я не хочу угадывать за топикстартера, что там имелось в виду, но всё, что ты
пишешь дальше - спорно.

Мож быть, мож быть, я скорее про отсутствие смысла за адресами стека в задании.
Quote:
Приведу пример - обращение к подпрограмме на ассемблере из Паскаля:
Code:
CODE      SEGMENT byte public
ASSUME cs:CODE
PUBLIC AbsFunc
AbsFunc   PROC near   ; вызов при помощи ближнего CALL
     push bp
     mov  bp,sp
     mov  ax,[bp+4]   ; AX = значение параметра
     cwd
     xor  ax,dx
     sub  ax,dx      ; AX содержит результат
     mov  [bp+4],ax
     pop  bp
     ret  2      ; ближний возврат
AbsFunc   ENDP
CODE      ENDS

Параметры передаются через область стека и возвращаются через неё же.
Есть соглашение о их передаче и возвращают их не через вершину стека,
а через определённые адреса.

Ну, здесь как бы другой коленкор, адреса определенные, но не те определенные, какие в задании. В задании хаотические, в правиле вызова на определенном месте в стеке, для чего BP и введен в архитектуру, так и вспоминается где-то читанная фраза "для поддержки конструкций ЯВУ" или что-то вроде того. В принципе, можно и через смещение от SP адресовать, компилятор способен следить за значением SP, но с сохранением BP на стеке и последующим копированием SP в BP создается связанный список, по нему можно отмотать назад и посмотреть все локальные переменные всех предыдущих вложенных вызовов.
Quote:
Поэтому тут и видно, что идет манипуляция с областью стека и запись в неё,
что никак не назвать бесполезным навыком.

Манипуляция не бестолковая, значит полезная ;)
Quote:
К580ВМ80 процессор конечно же музейный, но очень простой для понимания и обучения ассемблеру.

Более того, на нем можно и так разговаривать: Эф-е-ноль-один-це-два-ноль-ноль-пятьдесят :) На 86-м уже так не поговоришь
Quote:
Но я не защищаю задачу - нам топикстартер ни о смысле не сказал, ни спасибо Хардычу за готовый код... :wink:

А чой-то я тоже возбудился решить эту задачку. Специально не подглядываю, выложу на досуге. Вот интересно, откуда берется азарт решить? И задачка-то бессмысленная, дурацкая и простая... Наверное, потому что исход известен, а смысл - поразмяться и сравнить подход...


21 May 2013 07:46
Profile
Junior

Joined: 19 May 2013 14:05
Posts: 3
Location: 85.234.168.94
Reply with quote
Post 
Не пинайте меня сильно, у меня просто небольшой дефицит времени свободного. :(
Разумеется, в первую очередь, я хочу сказать огромнейшее спасибо HardWareMan'у ,за предоставленный вариант решения, и всем остальным, кто хоть как-то попытался направить меня на путь истинный.

Теперь о самой задаче и откуда она взялась. Дело в том, что специальность, на которую я учусь, больше связана с электротехникой и энергетикой, чем с электроникой. Но у нас был краткий курс цифровой электроники. Последняя тема, которую мы рассмотрели, это команды ветвления. Про стек нам вообще ничего не говорили. А эта задача что бы автомат получить. :) Она может и лишена здравого смысла, но преподавателю главное не 100% работоспособность, он всего лишь хочет увидеть более менее правильное использование команд.


21 May 2013 13:11
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 40 posts ]  Go to page Previous  1, 2, 3

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.