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

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

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

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

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

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

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

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

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

              Впрочем, если компилятор сумеет доказать, что там NULL, то он просто выкинет весь твой код, да и всё
              Ответить

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