Наглядный пример "стека"

Discussion in 'Болталка' started by DiesIrae, 11 Jul 2019.

  1. DiesIrae

    DiesIrae Active Member

    Joined:
    14 Mar 2019
    Messages:
    30
    Likes Received:
    158
    Reputations:
    0
    В учебных заведениях, для понимания работы стека памяти, обычно приводят аналогию - стопка блинов, стопка книг и т.п. Как-будто лучше аналогий не нашлось.
    Вот же лучшее представление о работе стека...
    Обойма...

    Хотите наглядный пример GPRS навигации?
     
    Coost, CKAP and quite gray like this.
  2. quite gray

    quite gray Well-Known Member

    Joined:
    8 Dec 2016
    Messages:
    154
    Likes Received:
    814
    Reputations:
    1
    Like за Терентия.
     
  3. DiesIrae

    DiesIrae Active Member

    Joined:
    14 Mar 2019
    Messages:
    30
    Likes Received:
    158
    Reputations:
    0
     
    Triton_Mgn and quite gray like this.
  4. Triton_Mgn

    Triton_Mgn Banned

    Joined:
    6 Jul 2015
    Messages:
    3,394
    Likes Received:
    4,600
    Reputations:
    41
    Мафия
     
  5. CKAP

    CKAP Well-Known Member

    Joined:
    9 Oct 2015
    Messages:
    634
    Likes Received:
    2,670
    Reputations:
    7
    Это тоже такой себе пример :( про блины не слышал (ну если речь о кулинарных изделиях..., тут как бы нужно уравнивать посылы) про диски и книги да. Стек это не просто "затолкал и вытолкнул".. его есче и назад отматывать можно, ибо из него не чего не выталкивается так то, а просто копируется и сдвигается.. возможно что то затераеться, ну это надо у Феникса уточнить. Уверен он его рассмотрел со всех сторон.

    Ну это, а что бы прога не схлопнулась и стек не умер есть такая хрень как подмена указателей SEH. Гугли, уверен тебе понравится.. а вобче по моему ты чумачедчий обормот, ударился в анатомию что ли :D
     
    #5 CKAP, 13 Jul 2019
    Last edited: 13 Jul 2019
    seostock and DartPhoenix like this.
  6. DartPhoenix

    DartPhoenix Well-Known Member

    Joined:
    15 Sep 2013
    Messages:
    377
    Likes Received:
    4,524
    Reputations:
    5
    Вообще ничего там не затирается в нормальных условиях но может зависеть от платформы затирается что-то или нет. Может зависеть и от конкретной реализации, но это все извращения...
     
    CKAP likes this.
  7. DiesIrae

    DiesIrae Active Member

    Joined:
    14 Mar 2019
    Messages:
    30
    Likes Received:
    158
    Reputations:
    0
    Всё просто, пытаюсь искать аналогии для "мнемоники", которые устраивали бы таких психов как я.

    Ну не, нравится мне а) засилье английского языка, б) аналогии, которые приняты - они для девочек
    Поэтому взял я программы МФТИ, МГУ, и еще пары Университетов...посмотрел что за учебные дисциплины они преподают. Набросал себе план (у мафии - есть план, у полиции - есть план, они все планировщики) и спокойнейши по 3-4 часа в день, посвящаю изучению.
    База какая-никакая есть. Осталось, взять чужие наработки, благо куча информации в открытом доступе есть, а в условиях рыночных отношений, и не очень высоких зарплат преподавателей, удовлетворить свой потребности в образовании (в знаниях) остается делом техники и целеустремленности.
    А практика, как известно - лучший критерий истины.
    Пока время есть, можно посвятить теории.
    Потому, как, до момента принятия закона о ЧВК, нужны события и время. А они, близки.
    У ЧВК - нет юрисдикции.
    Всё достаточно прозаично и на поверхности.
    Весьма показательная цитата с habr.com
    По законодательству РФ, Казачьи войска, ныне набирающие популярность - это Россгвардия.
    Так-же как ОМОН - это Отряд Мобильный Особого Назначения ( а не милиции, как раньше) - это Россгвардия. А не МВД.
    Маленькая историческая справка. ФСНК была создана, для свертывания наркотраффика из Афганистана. М-м-м...за 10 лет всё вполне успешно реализовано. Теперь накотраффик преимущественно из Китая.
    Если брать историческую аналогию...то, зачем нужна армия при наличии армии?, всё тоже просто:

    Далее, читаем статью Суркова, в независимой газете. Вспоминаем, что Дикая Дивизия - это опора дома Романовых, формирующаяся из Кавказских князей и понятно почему. Поскольку, практика когда переворот, происходит при поддержки регулярных войск - это то, что с подвигло Сталина вернуть столицу обратно в Москву, поскольку в Питере была Аврора. Понимаем, что Сурков чеченец. Осознаем, теперь тот факт, кто дает деньги и какие цели преследует, спонсируя гордых сынов Ноя (Нохчи)

    Вспоминаем, что Донбасс курирует Сурков. Понимаем, откуда Сурков черпает вдохновение и на каких моделях, строит свой курс. Почти дословные цитаты Муссолини. Это как-бы намекает.

    Вот и вся арифметика.
    Был, такой генерал Дудаев. Ещё в 95-м, говорил всё достаточно понятно.
    Чеченцы - самый сильный из народов Кавказа.
    Сталин не идиот. Поэтому и депортировал их.

    Предупрежден (проинформирован) - значит вооружен.
    Поэтому Трамп должен ударить по Ирану. Иначе к сентябрю будет в США дефолт. Курс доллара начинает падать уже третий день, по отношению и к рублю и к Евро, Фунт тоже подобвалился...Слабый рубль, позволил китайцам зайти на рынки РФ. А через наши рынки и инфраструктуру...и Порт в Крыму, дальше путь в Европу. Минуя Англию и США.
    Например торговорозничная сеть "Ярче" - это фиктивные ООО из Кемерово, Томска и т.п. которые продают китайские товары.
    Как говорил Ленин.
    Учиться, учится и ещё раз учиться...
    З.Ы, а вообще я просто долбоеб
     
    #7 DiesIrae, 13 Jul 2019
    Last edited: 13 Jul 2019
  8. CKAP

    CKAP Well-Known Member

    Joined:
    9 Oct 2015
    Messages:
    634
    Likes Received:
    2,670
    Reputations:
    7
    Я такое просто читать устану.

    >по 3-4 часа в день

    Мало. С такими короткими порциями проще сразу в отладчике со словарем все изучать. Айда очень даже помогает. Но кней нужно привыкнуть, и понять её коментарии к мнемоникам. Сам ПКашный софт это просто файл (Вобче все всегда просто файл, это окно кстати тоже), с набором адресов и содержимого, это если просто.

    Зы есть есче radare 2 это если под пингвином.

    Это же ж ужаз. Катастрофа, как жить то теперь с этим. Мда.. я так и думал.

    Я думаю что, все же перезатереть что то можно, и только очень прямыми руками (Ну если очень нужно) Стек штука хрупкая.

    А в целом картина такая, при старте проги в стак загружается (загрузником) всякая куча хуйни. Данных и либов. В процессе работы софта, активно работают переменные и канстанты, которые скорее всего тоже в регистры загоняются через стак. Спросить об этом точнее можно ммм наверное у того компилятора который собирал инструкции софтины. И на "выходе" получаем кучу данных. Каефф.. А товарищ походу хочет спиздить секретные агоритмы врагов :D
     
  9. DiesIrae

    DiesIrae Active Member

    Joined:
    14 Mar 2019
    Messages:
    30
    Likes Received:
    158
    Reputations:
    0
    Если бы так, всё было хитро.
    То ОС-ь бы не использовала виртуальную память, а работала бы исключительно с физической, то бишь виртуальная память нужна-же для того чтобы Не происходило конфликта за ресурсы, между программами.

    Понять принцип работы стека, можно через атаку на переполнение буфера обмена.
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
     
  10. DartPhoenix

    DartPhoenix Well-Known Member

    Joined:
    15 Sep 2013
    Messages:
    377
    Likes Received:
    4,524
    Reputations:
    5
    При старте проги у тебя в стеке лежит мусор оставленный загрузчиком. Ну как мусор... для кого-то мусор а кто-то в нем может найти что-то занятное. Смотря кто смотрит :p
     
    CKAP likes this.
  11. DiesIrae

    DiesIrae Active Member

    Joined:
    14 Mar 2019
    Messages:
    30
    Likes Received:
    158
    Reputations:
    0
    Развивая идею...получается такая картина. Если знать какие ячейки памяти были задействованы в стеке. То можно перехватить эти данные, на лету как говориться.
     
  12. DartPhoenix

    DartPhoenix Well-Known Member

    Joined:
    15 Sep 2013
    Messages:
    377
    Likes Received:
    4,524
    Reputations:
    5
    Там нечего толком перехватывать. Эта хрень может понадобиться для поиска базы нужной dll например. Не очень надежный способ но зато занимает мало места, иногда сие важно.
    Т.е. оказавшись внутри по неизвестному адресу ты не можешь просто взять и вызвать LoadLibrary. У тебя нет адреса. Чтобы найти этот адрес - тебе надо оказаться где-то приблизительно внутри нужной dll а дальше листать назад до заголовка. Такой адрес можно выхватить из стека. Только вот к моменту когда ты получишь управление ты и понятия не имеешь что там кто напихал в стек. Можно, конечно, делать по людски через FS:[xx] но не обязательно.
     
    CKAP likes this.
  13. DiesIrae

    DiesIrae Active Member

    Joined:
    14 Mar 2019
    Messages:
    30
    Likes Received:
    158
    Reputations:
    0
    Ты не совсем меня понял.
    Смотри.
    Если предположить, например что нам нужно перехватить именно конкретные данные в стеке.
    То, "гипотетически", опять-же, мы можем зная область выделенной памяти, подобрать их...и использовать по своей нужде.
    Например. Проверяя пароль. Программа обращается к таблице, в которой содержится пароли. (Понятно, что так делать не будут в 2019. Но так делали, а значит кто-то да будет...не важно!) Тогда, вопрос. Куда загрузятся значения хранящиеся в таблице. В стек.
    Т.е. если мы поставим в отладчике флаг, то мы поймаем куда это всё загрузилась. А значит, позже мы поймаем нужные пароли.
    Короче очень грубая теория.
     
    DartPhoenix likes this.
  14. CKAP

    CKAP Well-Known Member

    Joined:
    9 Oct 2015
    Messages:
    634
    Likes Received:
    2,670
    Reputations:
    7
    Это кстати не сильно сложно по реализации.

    Ну это я подсмотрел :oops:

    Code:
    include 'win32ax.inc'
    .data
    capt     db   'Win32-API',0
    text     db    128 dup(0)
    frmt     db   '%08X = База User32.dll в памяти',13,10
             db   '%08X = Точка входа в MessageBox()',0
    
    libName  db   'user32.dll',0
    fName    db   'MessageBoxA',0
    ;-------
    .code
    start:   invoke  GetModuleHandle,libName        ;// EAX = база DLL в памяти
             mov     ebx,eax                        ;// (запомнить в EBX)
             invoke  GetProcAddress,eax,fName       ;// EAX = база функции внутри DLL
            cinvoke  wsprintf,text,frmt,ebx,eax     ;// (числа в символы)
    
             invoke  MessageBox,0,text,capt,0
             invoke  ExitProcess, 0
    .end start
     
  15. DartPhoenix

    DartPhoenix Well-Known Member

    Joined:
    15 Sep 2013
    Messages:
    377
    Likes Received:
    4,524
    Reputations:
    5
    Не то ты нашел слегка :) Ну да ладно чо ушь...
     
  16. DartPhoenix

    DartPhoenix Well-Known Member

    Joined:
    15 Sep 2013
    Messages:
    377
    Likes Received:
    4,524
    Reputations:
    5
    Ты когда пишешь invoke GetModuleHandle - подразумевается что компилер сам тебе вставит что надо. А если ты будешь байтики записывать руками. Какие байтики надо записать вместо GetModuleHandle ?
    Это ж вызов функции. Функция находится где-то в dll'ине. А у тебя нихрена нет ни адреса этой функции ни адреса dll. Как ты ее вызывать будешь ? Это как я по пьяни хотел дозвониться и набирал номера рандомно на телефоне :) В принципе населения руины было около 50 миллионов... я думаю щас бы до сих пор пытался дозвониться :)

    На самом деле именно эти - легко найти обычно (хотя их и искать не сильно нужно...). Рабочий екзешник их импортирует, поэтому просто надо написать кодес поиска по таблице импорта. А вот ежели не импортирует или тебе нельзя туда лезть - все становится чуть интереснее :).
     
    CKAP likes this.
  17. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    997
    Likes Received:
    1,067
    Reputations:
    327
    всё несколько проще, компилируемый код продуцирует инструкции процессору, и по сути стек - это тажа обычная память, которая выделяется оператором new, но со своими оговорками и принципами. есть 2 регистра в х86 архитектуре, которые контролируют стек, один из них EBP - который как правило указывает на свой предыдущий адрес, а магия в том что EBP+X - это адреса аргументов, а EBP-X - это адреса локальных переменных функции. а ESP просто указывает на верх памяти текущей функции.

    ну и при вызове последующих функций указатели попросту растут вниз, а при возврате - восстанавливаются.
    отсюда и мудрость - обнуляйте указатели, потому что если это не делать явно - стек вернётся, а на том месте где ты ожидал увидеть 0 будет уже мусор от предыдущих функций.
     
    CKAP likes this.
  18. CKAP

    CKAP Well-Known Member

    Joined:
    9 Oct 2015
    Messages:
    634
    Likes Received:
    2,670
    Reputations:
    7
    Это общий регистр..
    Есть наглядный пример из дебагера?
     
  19. DartPhoenix

    DartPhoenix Well-Known Member

    Joined:
    15 Sep 2013
    Messages:
    377
    Likes Received:
    4,524
    Reputations:
    5
    Архитектурно-зависимые вещи. Где-то нет такого регистра ESP и параметры через такой стек передавать нельзя. Там исключительно адреса возврата и работает оно ровно как завещали очкастые тупые тетеньки у доски.
    Где-то стек представляет из себя отдельную микросхему и как оно там в ней записывается и что сохраняется знает только архитектор и божественный змей дарующий сосредоточение, пребывающий в сосредоточении :)

    UPD: кстати ты можешь и сам вполне замутить на ВМ такую архитектуру и реализовать стек к которому нельзя обращаться по адресам. И работать он будет так же как и классический. Можно использовать только push и pop. Так что х/з. Классическое определение верное.
     
  20. CKAP

    CKAP Well-Known Member

    Joined:
    9 Oct 2015
    Messages:
    634
    Likes Received:
    2,670
    Reputations:
    7
    Оооо ну это сложно.. надо будет посмотреть на моторолу. Ну давайте пока в рамках Итель говорить.
     
Loading...