Всем привет. Есть фаил с данными "iport" вот типо этого: 127.0.0.1:80 127.0.0.2:8080 Как проще считать эти данные?Чтоб было вот так: ip1 dd ? - тут первый ip адресс ip2 dd ? - тут второй ip адресс port1 dd ? - тут первый порт port2 dd ? - тут второй порт Начало делаю так: Code: format PE GUI 4.0 entry start include 'win32a.inc' start: invoke _lopen,proxylist,0 ; открыл фаил mov [hFile],eax ; сохранил его хенд invoke _lread,[hFile],buffer,500 ; считал данные в "buffer" ret ; выход из проги proxylist db 'pr.txt',0 ip1 dd ? ip2 dd ? port1 dd ? port2 dd ? buffer rb 500 section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' include 'api/kernel32.inc' include 'api/user32.inc' Открыл фаил,прочитал из него данные.Как дальше?Подскажите.
Ну лично я бы или делал маппинг, либо GetFileSize + VirtualAlloc для буфера. Для перевода IP в число воспользуйся функцией inet_addr А алгоритм прост. Выделяешь 4 байтный указатель или регистр для фиксации смещения. Например так char *p=buffer; далее выделяешь щетчик 4 байтный или регистр... типа int uk=0; Запускаешь цикл пока указатель uk меньше размера буфера Читаешь буфер до ':', ставишь вместо него 0 (buffer[uk]=0) - теперь у тебя по указателю p будет строка ip адрес - передаешь ее в функцию inet_addr сохраняешь результат. присваиваешь p=&b[uk]; идешь по буферу дальше натыкаешься на "\n" - 0x0A (насколько помню) ставишь buffer[uk]=0 теперь у тебя p указывает на строку порта - тебе нажо ее перевести в число... ставишь опять p на нужную позицию... Вот и весь разбор. А вообще на ассемблере можно много интересных способов придумать