2012-03-08 4 views
0

В моем учебнике NASM, «Руководство по программированию сборки в Linux» от Dandamundi, системный вызов 5 (открытие файла) описывается следующими параметрами.Добавление файла с int 0x80 (бит доступа?)

EAX = 5 
EBX = file name 
ECX = file access mode (read, write, read/write) 
EDX = file permissions 

Он не уточняет, какие коды доступа (восьмеричные, я предполагаю) на самом деле. 0200Q и 02000Q предположительно не работают. Я пытаюсь добавить содержимое одного файла в другой файл.

ответ

0

Посмотрев на /usr/include/asm/unistd_32.h, ясно, что номер системного вызова 5 разрешается до open. В свою очередь, глядя на man 2 open, говорится, что второй параметр должен включать O_RDONLY (00), O_WRONLY (01) или O_RDWR (02). Он также может включать в себя ряд дополнительных флагов, объединяя их вместе, которые задокументированы на указанной странице руководства.

В вашем случае вы, вероятно, захотите записать в файл и добавить к нему. Поэтому было бы желательно, чтобы O_WRONLY | O_APPEND. После просмотра файлов заголовков эта операция дает значение 02001, и это то, что вы должны поместить в регистр ecx.

+0

спасибо! 'mov ECX, 02001Q' работает отлично, и моя программа работает. – Matt

0

Я думаю, что это sys_open системный вызов, поэтому параметры нужно отобразить один к одному для тех из open(2):

Аргумент флаги должны включать в себя один из следующих режимов доступа: O_RDONLY, O_WRONLY или O_RDWR. Эти запросы открывают файл только для чтения, только для записи или чтения/записи. Кроме того, ноль или более флагов создания файлов и флаги состояния файла могут быть побитовыми или в флагах. Флагами создания файлов являются O_CREAT, O_EXCL, O_NOCTTY и O_TRUNC. ...

Смежные вопросы