Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Assembler > Замена строки в файле |
Автор: semiono 31.08.10, 22:06 |
Тема явно не для начинающих, поэтому прошу помощи. Вот очень хорошие примеры Поиск строки с использование SCAS Только хотелось бы модифицировать, чтобы данные были во внешнем файле, а это за собою повлечёт функции CreateFile() CloseFile() итп. со многими условностями и особенностями. Кстати, для загрузки строк есть "fscanf from 'MSVCRT.DLL'", хотелось бы тоже примеров. В худшем случае покажите на masm32 примеры, только не на C++ ![]() |
Автор: AndNot 01.09.10, 21:31 |
Непонятно, что смущает в использовании CreateFile? Для поиска файл даже не нужно разбивать на строки, все равно каждая строка разделена символами перевода строки и возврата каретки. |
Автор: semiono 02.09.10, 07:55 |
Нет, ничего не смущает. Это я к слову сказал. Какраз создать файл я могу, а вот дальше затрудняюсь |
Автор: leo 02.09.10, 08:13 |
- GetFileSize, HeapAlloc, ReadFile - поиск - HeapFree, CloseHandle Добавлено PS: Вопросы по фасму или ВинАПИ ? |
Автор: semiono 02.09.10, 12:51 |
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 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 вроде бы написано об этом, но всё смешанно с оконными контролами в которые я пока не хочу вникать. Вообще эти уроки с окнами вечно мешаются в суть дела вникать. Цитата - поиск Видимо вопрос и по асму, так как думать трудно самостоятельно. ![]() ![]() Кстати, мой пример и без кучи работает, или при поиске это необходимо? Работа с блоками памяти меня вообще пугает. )) |
Автор: leo 02.09.10, 13:12 |
Вопросы нужно четче задавать. В #1 ты ссылаешься на пример поиска строки, откуда можно сделать вывод, что тебе сначала нужно прочитать файл, найти строку и только потом ее заменить. А в #5 ты просто что-то записываешь в файл по фикс.смещению без всякого поиска - ес-но тут никакой буфер для чтения и соотв-но HeapAlloc не нужны... |
Автор: AndNot 02.09.10, 13:14 |
При старте программы винда сама выделяет немного кучи, поэтому вполне хватит GetProcessHeap. Полученный хендл можно использовать в HeapAlloc, HeapReAlloc и HeapFree. И все что тут нужно знать - это то, что HeapAlloc не может выделить более 7fffffffh памяти за раз. Возвращаемый ей адрес блока памяти уже залочен и сразу же пригоден для использования. Все легко и просто. В общем, если не хочешь создавать нормальный менеджер памяти, то память выделять можно и так: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> mptr = HeapAlloc(GetProcessHeap,..... |
Автор: semiono 02.09.10, 19:34 |
Кстати, а нету чего нибудь из апи похожего на WritePrivateProfileString() для xml? Так как это модный формат, интересно чем приложения пишут свои конфиги в xml? Или они обычно парсят файл, хотя это и неудобно? Раз уж есть формат значит должно быть что-то удобное. Прога Cubase4 вместо реестра всё хранит в xml конфиге. |
Автор: AndNot 02.09.10, 23:10 |
API нет. Скорее всего есть готовые сторонние либы. Но, поскольку для тебя MASM и TASM являются отстоем, то ничем помочь не могу, я просто не в курсе как в фасме подключать модули от Си, Дельфи и прочих. В "отстойных" это делается элементарно, благо они умеют работать с LIB и OBJ файлами. Если не секрет, то чем INI-файлы не устраивают? |
Автор: semiono 03.09.10, 16:16 |
![]() инфы мало продвигаюсь муравьиными шагами. Просто в фасм нету обжектников и вообще комманд строка не нужна, сразу готовый файл. Я даже не знаю зачем obj нужны, я сам начинал прежде кампилить на тасм, потом линкер подключал, но смысл я так и не понял зачем линковать вручную. Наверное так в дебаггере что-то там изучать легче на неком этапе сборки. Почемуж, AndNot, подскажи на тасм? Или на масм! Может я и разберусь. |
Автор: AndNot 03.09.10, 20:04 |
Есть два решения: 1. Скачать любой сишный парсер, коих навалом и с исходниками. Компильнуть и подключить получившийся LIB-файл к своему. Правда придется попотеть, но зато код будет включен в программу и можно выбрать либу по потребностям. 2. Скачать DLL. Тут особо мучиться не придется, вызовы подпрограмм стандартизированы и автономность либы гарантирована, но DLL еще придется поискать, их не очень много. Выбирай что больше нравится. Либ полно, например здесь. Выбор за тобой ![]() |
Автор: semiono 03.09.10, 21:13 |
Я читал вот это ещё до того как здесь тему начал - Регулярные выражения, что-то весьма интересное, но надо набраться сил и терпения это всё переварить. Мне нужно здалать загрузчик-запускатель программы с предварительным изменением конфигурации. А тут уже у кого как устроенно, кто в реестре хранит, кто в ini, а кто и в xml. Затея не сложная, чаще всего надо указать размеры окна SM_CXSCREEN, SM_CYSCREEN, а иногда сбросить fullscreen. ![]() Первая преграда была, когда встретился SciTE конфиг по типу ini-файла, но без секции [] при помощи AutoIt3 эта проблемма решилась. Но меня в сторону асм всёравно тянет. |
Автор: AndNot 05.09.10, 14:44 |
Сдается мне, что изучать асм через парсер xml не самая лучшая затея ![]() |