На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Замена строки в файле , fasm
    Тема явно не для начинающих, поэтому прошу помощи.
    Вот очень хорошие примеры Поиск строки с использование SCAS
    Только хотелось бы модифицировать, чтобы данные были во внешнем файле, а это за собою повлечёт
    функции CreateFile() CloseFile() итп. со многими условностями и особенностями.

    Кстати, для загрузки строк есть "fscanf from 'MSVCRT.DLL'", хотелось бы тоже примеров.

    В худшем случае покажите на masm32 примеры, только не на C++ :)
      Непонятно, что смущает в использовании CreateFile? Для поиска файл даже не нужно разбивать на строки, все равно каждая строка разделена символами перевода строки и возврата каретки.
        Нет, ничего не смущает. Это я к слову сказал. Какраз создать файл я могу, а вот дальше затрудняюсь
          Цитата semiono @
          Какраз создать файл я могу, а вот дальше затрудняюсь

          - GetFileSize, HeapAlloc, ReadFile
          - поиск
          - HeapFree, CloseHandle

          Добавлено
          PS: Вопросы по фасму или ВинАПИ ?
            ExpandedWrap disabled
              include '%fasm%\win32ax.inc'
              section '.code' executable
              start:
                      invoke CreateFile,lpFile,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,NULL
                      mov [hFile],eax
                      invoke SetFilePointer,[hFile],0x7,NULL,NULL
                      invoke WriteFile,[hFile],zz,1,SizeWrite,NULL
                      invoke CloseHandle,[hFile]
              section '.data' readable
                      zz db a9
              section '.data' readable writable
                      hFile dd ?
                      hWnd dd ?
                      SizeWrite dw ?

            Всё больше ничего я не могу :)

            HeapAlloc - hHeap [in] This handle is returned by the HeapCreate or GetProcessHeap function.
            ещё и надо хип создавать?
            Тут http://www.wasm.ru/article.php?article=1001012 вроде бы написано об этом, но всё смешанно
            с оконными контролами в которые я пока не хочу вникать. Вообще эти уроки с окнами вечно мешаются в суть дела вникать.

            Цитата
            - поиск

            Видимо вопрос и по асму, так как думать трудно самостоятельно. :D :blush:

            Кстати, мой пример и без кучи работает, или при поиске это необходимо? Работа с блоками памяти меня вообще пугает. ))
            Сообщение отредактировано: semiono -
              Вопросы нужно четче задавать. В #1 ты ссылаешься на пример поиска строки, откуда можно сделать вывод, что тебе сначала нужно прочитать файл, найти строку и только потом ее заменить. А в #5 ты просто что-то записываешь в файл по фикс.смещению без всякого поиска - ес-но тут никакой буфер для чтения и соотв-но HeapAlloc не нужны...
              Сообщение отредактировано: leo -
                При старте программы винда сама выделяет немного кучи, поэтому вполне хватит GetProcessHeap. Полученный хендл можно использовать в HeapAlloc, HeapReAlloc и HeapFree. И все что тут нужно знать - это то, что HeapAlloc не может выделить более 7fffffffh памяти за раз. Возвращаемый ей адрес блока памяти уже залочен и сразу же пригоден для использования. Все легко и просто.

                В общем, если не хочешь создавать нормальный менеджер памяти, то память выделять можно и так:
                ExpandedWrap disabled
                  mptr = HeapAlloc(GetProcessHeap,.....
                  Кстати, а нету чего нибудь из апи похожего на WritePrivateProfileString() для xml?
                  Так как это модный формат, интересно чем приложения пишут свои конфиги в xml?
                  Или они обычно парсят файл, хотя это и неудобно? Раз уж есть формат значит должно быть что-то удобное.
                  Прога Cubase4 вместо реестра всё хранит в xml конфиге.
                  Сообщение отредактировано: semiono -
                    API нет. Скорее всего есть готовые сторонние либы. Но, поскольку для тебя MASM и TASM являются отстоем, то ничем помочь не могу, я просто не в курсе как в фасме подключать модули от Си, Дельфи и прочих. В "отстойных" это делается элементарно, благо они умеют работать с LIB и OBJ файлами.
                    Если не секрет, то чем INI-файлы не устраивают?
                      :D Неправда, я даже тасм уважаю! Просто мне как новичку некомфортно, да и в фасм мне так же,
                      инфы мало продвигаюсь муравьиными шагами. Просто в фасм нету обжектников и вообще комманд строка не нужна,
                      сразу готовый файл. Я даже не знаю зачем obj нужны, я сам начинал прежде кампилить на тасм, потом линкер
                      подключал, но смысл я так и не понял зачем линковать вручную. Наверное так в дебаггере что-то там изучать легче на неком этапе сборки. Почемуж, AndNot, подскажи на тасм? Или на масм! Может я и разберусь.
                        Есть два решения:
                        1. Скачать любой сишный парсер, коих навалом и с исходниками. Компильнуть и подключить получившийся LIB-файл к своему. Правда придется попотеть, но зато код будет включен в программу и можно выбрать либу по потребностям.
                        2. Скачать DLL. Тут особо мучиться не придется, вызовы подпрограмм стандартизированы и автономность либы гарантирована, но DLL еще придется поискать, их не очень много.
                        Выбирай что больше нравится. Либ полно, например здесь.

                        Выбор за тобой ;) Но, ИМХО, гемор это все, лучше уж "структурированным" INI обойтись, дешево и сердито, а для большинства задач более чем достаточно.
                          Я читал вот это ещё до того как здесь тему начал - Регулярные выражения,
                          что-то весьма интересное, но надо набраться сил и терпения это всё переварить.


                          Цитата AndNot @
                          лучше уж "структурированным" INI обойтись

                          Мне нужно здалать загрузчик-запускатель программы с предварительным изменением конфигурации.
                          А тут уже у кого как устроенно, кто в реестре хранит, кто в ini, а кто и в xml.
                          Затея не сложная, чаще всего надо указать размеры окна SM_CXSCREEN, SM_CYSCREEN, а иногда
                          сбросить fullscreen. :) Заодно и ассемблер поизучать.
                          Первая преграда была, когда встретился SciTE конфиг по типу ini-файла, но без секции []
                          при помощи AutoIt3 эта проблемма решилась. Но меня в сторону асм всёравно тянет.
                          Сообщение отредактировано: semiono -
                            Сдается мне, что изучать асм через парсер xml не самая лучшая затея :) А INI-файлы тем и хороши, что легко редактируются ручками, особенно при тестировании программы. К тому же есть аналогичные реализации и под другие ОС, под один только ДОС их было вагон и тележка. Т.е. формат "кроссплатформенный".
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0334 ]   [ 15 queries used ]   [ Generated: 19.04.24, 14:40 GMT ]