1. Assembler / Говнокод #29180

    −1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    TLS_Callback:
    0051CAC3: push ebp
    0051CAC4: mov ebp,esp
    0051CAC6: cmp dword ptr ds:[51C01C],0
    0051CACD: je expressor.51CAD6
    0051CACF: pop ebp
    0051CAD0: jmp dword ptr ds:[51C020]
    0051CAD6: mov eax,dword ptr ss:[ebp + 8]
    0051CAD9: xor ecx,ecx
    0051CADB: inc ecx
    0051CADC: test eax,eax
    0051CADE: je expressor.51CAF3
    0051CAE0: mov edx,dword ptr ds:[eax + 3C]
    0051CAE3: mov edx,dword ptr ds:[edx + eax + 28]
    0051CAE7: cmp byte ptr ds:[eax + edx],CC
    0051CAEB: jne expressor.51CAF3
    0051CAED: mov dword ptr ds:[51C038],ecx
    0051CAF3: cmp dword ptr ds:[51C038],0
    0051CAFA: mov dword ptr ds:[51C028],eax
    0051CAFF: mov eax,dword ptr ss:[ebp + C]
    0051CB02: mov dword ptr ds:[51C02C],eax
    0051CB07: mov eax,dword ptr ss:[ebp + 10]
    0051CB0A: mov dword ptr ds:[51C03C],ecx
    0051CB10: mov dword ptr ds:[51C030],eax
    0051CB15: jne expressor.51CB21
    0051CB17: call expressor.51C81B
    0051CB1C: mov dword ptr ds:[51C038],eax
    0051CB21: pop ebp
    0051CB22: ret C

    Что получает через mov eax,dword ptr ss:[ebp + C] и mov eax,dword ptr ss:[ebp + 10]?

    Запостил: BelCodeMonkey, 16 Сентября 2025

    Комментарии (36) RSS

    • ну очевидно четыре байта из стека со мещением 12 и 10, а что?
      Ответить
      • 12 и 16

        это кстати не адреса? я в диалектах асма не оч
        Ответить
        • 12 и 0x10 конечно же, да:)

          мне кажется это сегмент SS, и внутри него смещение 12 от регистра BP, не?

          Ну обычно так раньше делали. Вот ты на стек поклал кучу переменных, потом поставил BP наверхс тека, и от него отсчитываешь.
          Ответить
          • И сейчас так же мошут делать, если у тебя 100500 аргументов, или если адрес локалки берёшь и т.п.
            Ответить
            • угу

              как еще ты можешь обратиться к пятой-десятой локалке>? Только по сдвигу от BP


              Слушайте, а есть примеры совершенно других подходов? вот например чтобы стека вообще не было

              Или чтоб ырегистров не было (кажется в JVM и CLR так?)
              Ответить
              • JVM юзает регистры во все поля, если мы про выхлоп джита. Там и первые шесть что ли параметров передаются на регистрах, на стек течёт только избыточный жир
                Ответить
                • Мы не про выхлоп джита конечно, а про JVMM саму
                  там нет регистров
                  Ответить
                  • ну логично что stack machine не будет использовать регистры!
                    Ответить
              • CALL imm чи mem это PUSH IP; PUSH CS; JMP imm/mem соотв, так что стек всегда есть
                Ответить
                • ну вот правда ли ВСЕГДА так?

                  Грубо говоря, по-другому комп не сделать?
                  Ответить
                  • На другом процессоре в смысле?
                    Есть много камней, где отсутствует хардварный стек, но есть link register, который надо сохранять в прологе и восстанавливать в эпилоге.
                    Ответить
                    • > сохранять
                      В памяти, что характерно.
                      Другими словами, стека нет, а фрейм всё равно есть.
                      Ответить
              • Большинство вм были чисто стековые, потому что это очень просто.
                Для оптимизации, в реализации верхушку можно в регистре хранить
                Ответить
      • Если проще какие-то аргументы "функции"
        Ответить
        • а смешно, что во времена прерываний DOS и BIOS, аргументы передавали через регистры.
          Потом стали писать на сях, и передавать их через стек.
          А потом пришел x64, и опять стали стараться все через регистры (бо их стало дохуя)
          Ответить
          • Мне кажется, во времена дос, потомушта асм, а потом аомпы стали быстрее, а большинство компиляторов были не особо умные
            Ответить
          • Ты забываешь про __фасткал
            Ответить
            • угу, в фасткале пытались все в регистры упаковать
              Ответить
          • Вначале было слово, а потом байт
            До изобретённого в масме INVOKE никаких параметров вообще не было.
            Ответить
            • Губ, ну ты меня понял же


              Я сам ложил аргументы в регистры и вызывал INT
              Ответить
          • До прерываний были таблицы адресов
            Ответить
            • да, уже лучше: где-то не было прерываний и можно было просто делать JMP или даже просто менять значеие IP

              теперь вопрос: а были машины вообще без стека? НУ в машине питуринга же стека нет, нет?
              Ответить
    • пользуясь анонимностью и возможностью гнать любую хуергу предположу, что у тебя прилетают аргументы через стек, и эта поебота рассовывает в заранее определенные участки памяти пару интов, плюс некоторые условия
      Ответить
      • Ну файк, ну какая тут анонимность?

        Мы в этом купе пятнадцать лет втроем едем, я тебя по запятым опознать могу.
        Ответить
    • пахнет 32хбитным кодом и каловой конверцией передачи аргументов через стек, и даже frame pointer есть

      поскольку я этот код понимаю, он вероятно руками писаный
      Ответить
    • петухи кто шарит что это https://docs.ipfs.tech/ ?
      Ответить
      • Это ссылка
        Ответить
        • это буквы
          Ответить
        • А можешь её разыменовать??
          Ответить
          • Мне мама не разрешает ссылки от незнакомых дяденек разыменовывать. А вдруг там NULL?
            Ответить
            • тебе очень крупно повезет, если там NULL. За нул ты получишь Генерала Протектед Фейлд (соответственно сигбас или аксесс виолейшен или тред бед екзек), потому что такой адрес скорее всего ни на какую страничку не замаплен.

              А вот если там кусочек других данных, то ты можешь получить совершенно неожиданные результаты

              Впрочем, если компилятор сумеет доказать, что там NULL, то он просто выкинет весь твой код, да и всё
              Ответить
    • Ученые: шимпанзе каждый день «выпивают» по бутылке пива
      Ответить
      • https://ichef.bbci.co.uk/ace/ws/800/cpsprodpb/bfbd/live/895f7fa0-947f-11f0-9cf6-cbf3e73ce2b9.jpg.webp

        https://www.dialog.ua/images/content/5d08ae992e8b7e8c3855475d4dcad8d9.jpg
        Ответить

    Добавить комментарий