2012-03-08 58 views
0

在我的NASM教科书Dandamundi的“Linux汇编程序指南”中,系统调用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_RDONLY00),O_WRONLY01)或O_RDWR02)。它也可能包含一些额外的标志,将它们放在一起,这些标志记录在手册页上。

在你的情况,你可能希望能够写一个文件,并追加到它。因此,O_WRONLY | O_APPEND将是可取的。在查看头文件后,该操作产生值02001,这就是你应该把它放在ecx寄存器中。

+0

非常感谢您! 'MOV ECX,02001Q' 作品完美,我的程序工作。 – Matt 2012-03-08 19:54:43

0

我觉得这是sys_open系统调用,这样的参数应该映射一个-to-one的那些open(2)

的论点标志必须包括下列访问模式之一: O_RDONLY, O_WRONLY或O_RDWR。这些请求分别以只读,只写或读/写方式打开文件 。此外,零 以上的文件创建标志和文件状态标志可以在标志按位或运算 。该文件创建标志O_CREAT,O_EXCL,O_NOCTTY和 O_TRUNC。 ...