|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
|||||||||||
GAS/AT&T Чтение из файла в локальную переменную (на стеке)06.04.2020, 17:33. Показов 4740. Ответов 17
привет
помогите пожалуйста разобраться в простом вопросе есть файл
не получается. как это можно сделать? научите пожалуйста
0
|
|||||||||||
| 06.04.2020, 17:33 | |
|
Ответы с готовыми решениями:
17
Чтение из файла и запись в переменную
|
|
Модератор
|
||||||
| 06.04.2020, 17:46 | ||||||
0
|
||||||
|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
|
| 06.04.2020, 21:14 [ТС] | |
|
Когда начинаю читать от туда, то ничего не выводит. Из секции читаю, все норм, а из стека не выходит. Какие есть мысли?
0
|
|
|
Модератор
|
|
| 06.04.2020, 21:43 | |
|
Выполните в отладчике - посмотрите код возврата чтения файла, посмотрите содержимое стека.
Подозреваю, что имя файла должно заканчиваться 0. Чудес не бывает - нужно проверять код завершения файловых операций (открытие, чтение, запись) и при ошибке выводить диагностическое сообщение.
0
|
|
|
1137 / 685 / 412
Регистрация: 07.11.2015
Сообщений: 1,102
|
|||||||
| 07.04.2020, 02:12 | |||||||
Сообщение было отмечено ФедосеевПавел как решение
Решениеlea.Но системный вызов через прерывание 80h работает с 32-битными регистрами и в ecx не запихнуть указатель на стек. Системные вызовы в Linux
1
|
|||||||
|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
||||||||||||
| 07.04.2020, 07:39 [ТС] | ||||||||||||
|
нет. что -то не то.
0
|
||||||||||||
|
1137 / 685 / 412
Регистрация: 07.11.2015
Сообщений: 1,102
|
|
| 07.04.2020, 11:34 | |
|
pcmax, что не так?
Я привёл пример вызова не int $0x80, а syscallТам параметры загружаются в другие регистры RDI (первый параметр), RSI (второй), RDX (третий), R10 (четвёртый), R8 (пятый), R9 (шестой). И номера функций в RAX там другие http://blog.rchapman.org/posts... or_x86_64/
0
|
|
|
Модератор
|
|
| 07.04.2020, 11:44 | |
|
Да, ошибся я с определением адреса и не учёл x64.
Emilien совершенно прав по каждому пункту: - lea - syscal - другой набор регистров, соответствующий syscall Есть смысл прислушаться к совету. К этому - и первый вызов (открытие на чтение) перевести на syscall. Кроме того, каждая файловая операция должна выводить диагностическое сообщение при ошибке - резко сокращает поиск места ошибки.
0
|
|
|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
||||||||
| 07.04.2020, 12:01 [ТС] | ||||||||
|
вот рабочий кусок кода по чтению из файла. куда нужно вставить ваш кусок, чтобы чтобы прочитанно было не из секции не инициализированных данных, а из стека? прошу вас, покажите как надо использовать ваш кусок кода из гугла.
как использовать ваш кусок кода? прошу вставте ваш код в этот что выше с учетом того что читать будет из -8(%rbp) Добавлено через 1 минуту да нет ошибки. напишите с использованием 32битных регистров. смысл в том, что не читается из стека. причем тут системные вызова? все работает, пока дело не доходит до чтения из -8(%rbp) Добавлено через 3 минуты работает, понимаете. я не прошу цеплятся к системным возовам, потому что код полностью рабочий и сними. дело в том вопрос в другом, как записать в -8(%rbp) вместо viev и как прочитать из -8(%rbp) вместо viev. вот в чем вопрос.
0
|
||||||||
|
Модератор
|
|
| 07.04.2020, 12:03 | |
|
Правильно отметил Emilien - чтобы поместить в rcx адрес строки для вывода на экран, а перед этим поместить туда текст из файла - нужно использовать не mov, а lea.
0
|
|
|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
||||||||
| 07.04.2020, 12:09 [ТС] | ||||||||
|
прав он будет по каждому пункту, когда напишет рабочий код. а не закинет цитаты из гугла. Добавлено через 1 минуту пожалуйста напишите с использованием lea. хоть с чем, лишь бы работало. просим Добавлено через 3 минуты
0
|
||||||||
|
Модератор
|
||||||
| 07.04.2020, 13:06 | ||||||
0
|
||||||
|
1137 / 685 / 412
Регистрация: 07.11.2015
Сообщений: 1,102
|
||||||
| 07.04.2020, 13:18 | ||||||
Сообщение было отмечено ФедосеевПавел как решение
Решение
2
|
||||||
|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
||||||||
| 07.04.2020, 14:11 [ТС] | ||||||||
|
у вас выводит?
0
|
||||||||
|
1137 / 685 / 412
Регистрация: 07.11.2015
Сообщений: 1,102
|
|
| 07.04.2020, 14:33 | |
Сообщение было отмечено ФедосеевПавел как решение
Решение
Для открытия файла и выхода из программы можо обойтись int $0x80, а вот для чтения в буфер и вывода на экран уже нужен syscall, так как буфер в стеке и адрес его в районе 0x7fffffffd000, а в ecx поместится только 0xffffd000.
Онлайн песочница https://www.onlinegdb.com/BJNXfy5wL
2
|
|
|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
||||||
| 07.04.2020, 15:15 [ТС] | ||||||
|
что психовать то? щас только говорили мне что неправильно делаю, что использую int $0x80 и тут же пишут.
тут int $0x80 тут sycall. или бы написали все в 32 виде, или в 64. так всегда. напишут лишь бы отвязался. Добавлено через 1 минуту
все. написал. спасибо
0
|
||||||
|
Модератор
|
|
| 07.04.2020, 16:16 | |
|
У меня нет Linux. Поэтому файловые операции проверить не могу.
Недавно нашёл онлайн компилятор NASM + Linux - там проверяю вывод строк, но с файлами - там невозможно. Поэтому я просто исправлял некоторые ошибке в вашем коде и показывал исправления. Именно знаний в программировании под Linux x64 при помощи gas - у меня нет совсем, надеялся на вашу собственную работу. Добавлено через 1 минуту Поделитесь итоговым результатом - кому-то будет тоже интересно.
0
|
|
|
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
|
|||||||
| 07.04.2020, 21:51 [ТС] | |||||||
Сообщение было отмечено ФедосеевПавел как решение
Решение
пишу из головы. могу сделать ошибку. но примерно так
Добавлено через 4 часа 5 минут
2
|
|||||||
| 07.04.2020, 21:51 | |
|
Помогаю со студенческими работами здесь
18
Чтение строки из файла в переменную
Чтение из файла в переменную типа string Регулируемое чтение символов из файла в переменную Чтение в переменную одного значения из файла: Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|