Использование 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 ++ для открытия / закрытия файла?
Загрузите все данные файла в память и передайте указатель на эту память. Когда закончите, просто запишите (теперь измененные) данные обратно в файл.
Я слышал, что вы можете создать Fstream и отправить его указатель как
параметр функции в NASM, тогда вы можете работать с байтами
в этом указателе.
Это работает в принципе, хотя и отличается от того, что вы могли себе представить. Содержимое файла не находится в памяти, поэтому вы не можете получить к нему доступ из сборки. Однако вы можете позвонить в Fstream’s read
функция-член из сборки для извлечения данных из файла.
Обратите внимание, что вызов функций-членов C ++ из ассемблера довольно сложен, поскольку бинарная объектная модель не стандартизирована и, следовательно, может меняться между разными компиляторами. Вероятно, вместо этого проще использовать интерфейс более низкого уровня (C-stdlib или функции ввода-вывода операционной системы), так как гораздо проще выполнять вызовы функций C из сборки.