Linux — Как я могу прочитать и изменить байты файла, используя сборку NASM, с C ++ для открытия / закрытия файла?

Использование C ++ и NASM Assembly для 32-битной программы в Linux CentOS.

Я хочу открыть файл в C ++ и изменить его с помощью NASM Assembly.

я имел услышанным что вы могли бы создать fstreamи отправьте его указатель в качестве параметра функции в NASM, после чего вы сможете работать с байтами в этом указателе.

Вышеуказанное не работает для меня, потому что отправка указателя на fstream в NASM, похоже, не дает байтов в файле. Максимум, что я мог сделать, это прочитать байты в файле, поместить их в char vector и отправьте его в качестве параметра моей функции NASM, но внесенные в него изменения не повлияют на файл, верно?

То, как я получаю байты, описано в http://www.cplusplus.com/doc/tutorial/files/, в разделе «Двоичные файлы».

Как я могу прочитать и изменить байты файла, используя сборку NASM, с C ++ для открытия / закрытия файла?

0

Решение

Загрузите все данные файла в память и передайте указатель на эту память. Когда закончите, просто запишите (теперь измененные) данные обратно в файл.

2

Другие решения

Я слышал, что вы можете создать Fstream и отправить его указатель как
параметр функции в NASM, тогда вы можете работать с байтами
в этом указателе.

Это работает в принципе, хотя и отличается от того, что вы могли себе представить. Содержимое файла не находится в памяти, поэтому вы не можете получить к нему доступ из сборки. Однако вы можете позвонить в Fstream’s read функция-член из сборки для извлечения данных из файла.

Обратите внимание, что вызов функций-членов C ++ из ассемблера довольно сложен, поскольку бинарная объектная модель не стандартизирована и, следовательно, может меняться между разными компиляторами. Вероятно, вместо этого проще использовать интерфейс более низкого уровня (C-stdlib или функции ввода-вывода операционной системы), так как гораздо проще выполнять вызовы функций C из сборки.

1

По вопросам рекламы [email protected]