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

    −3

    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
    format PE GUI at 0x10000
    
    include 'win32a.inc'
    
    invoke  MessageBoxA, 0, message, caption, MB_ICONQUESTION + MB_OK
    invoke ExitProcess, 0
    
    message db "Just test.", 0
    caption db "Test.", 0
    
    data import
        library kernel32, 'KERNEL32.DLL', user32, 'USER32.DLL'
    
        import kernel32, ExitProcess, 'ExitProcess'
    
        import user32, MessageBoxA, 'MessageBoxA'
    end data

    Не пойму, чочему уменьшив базу на 1 программа перестаёт роботать, но собирается нормально. 0x10000 -- это самое маленькое значение с которым она роботать. С 0x0 какая-то ашипка на счет длл лезит.

    И ксатати, лоли дебагер почему-то не могет зогружать такие програмым.

    Запостил: yet_another_one_shit, 31 Августа 2018

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

    • показать все, что скрытоvanished
      Ответить
    • У венды шаг резервирования виртуальной памяти 64к, емнип. Поэтому первые 64к отлетают для защиты от NULL и аллокатор их никогда не юзает.
      Ответить
      • То есть можно загружаться по любому адресу начиная с 0x10000? А писать и какать там можно? И почему оля не загружает файлы с нестандартной базой?
        Ответить
        • > по любому адресу
          The preferred address of the first byte of image when loaded into memory; must be a multiple of 64K.

          > можно
          Низя, обращение к первым 64К всегда вызывает пейджфолт т.к. аллокатор туда ничего не размещает.
          Ответить
      • И почему с базой 0x0 винде ругается, что не может найти какую-то там длл?
        Ответить
        • А можно полностью ошибку?
          Ответить
          • Ну это я только вечером смогу.
            Ответить
          • показать все, что скрытоvanished
            Ответить
          • Я дурачок – это происходит толтко если ещё укозать org 0x0:

            Приложению не удалось запуститься, поскольку e run in DOS mode.$ не был найден.

            Вчера был другой текст. Какая-то хуйня с таблицей импорта из-за того что я укозал смещение.

            Если мне нужно юзать какое-то произвольно больщое непрерывное куско памяти, как это лучше делать?
            Ответить
            • > как это лучше делать
              Копулировать под 64 бита.
              Ответить
              • Я о том что программе доступно всё адресное просранство? Только хз куда её загрузчик разместит.
                Ответить
                • Ну если грубо -- то нижняя половина (на 64-битке дохуя но намного меньше половины из-за экономии транзисторов в проце) виртуального адресного пространства за вычетом начала и конца. Твою то прогу то он разместит куда попросишь, а вот всякие ntdll въебёт хуй знает куда (по вписанному в dll адресу если ASLR выключен).
                  Ответить
                  • Ну то есть лучше сразу зарезервировать большой кусок памяти? db mnogo dup(?)
                    Ответить
                    • Ну тип того, если на аллокатор не надеешься.
                      Ответить
            • показать все, что скрытоvanished
              Ответить
            • показать все, что скрытоvanished
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • В смысле сделать два PE (32-битный и 64-битный) в одном экзешнике?

                  В «Макоси» почему-то осилили «Universal binary» и «Fat binary». В эти форматы можно затолкать одновременно код для для «ia32», «x86_64», «Power PC» и «Motorola 68K». Можешь упаковать несколько полноценных экзешников и получить действительно жирную, но портативную программу, которую можно запустить на компах с разными процессорами, а можешь к полноценному добавить заглушки, которые будут пользователю выводит сообщение, что нужен комп с другим процессором или система другой разрядности.

                  Вика ещё пишет про «FatELF», но этот проект, к сожалению, мёртв.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Приложения для мобильников –— отдельная тема. Ты можешь в apk для «Андроида» одновременно затолкать so-файлы для MIPS, ia32, x86_64, ARM, ARM64 –— загрузчик сам выберет, какой ему нужен. С одной стороны, это вредительство: флешка у мобильника и так небольшая, а тут ещё столько мёртвого груза. С другой стороны, тупому пользователю мобильника не нужно думать, какую версию программы устанавливать.
                      Ответить
                  • показать все, что скрытоvanished
                    Ответить
                • Потому что майкрософт не желает резать курицу несущую золотые яйца.
                  Ответить

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