在我的NASM教科书Dandamundi的“Linux汇编程序指南”中,系统调用5(打开文件)使用以下参数进行描述。用int 0x80(访问位?)追加文件
EAX = 5
EBX = file name
ECX = file access mode (read, write, read/write)
EDX = file permissions
它没有说明接入码(八进制,我假设)实际上是什么。 0200Q和02000Q显然不工作。我试图将一个文件的内容附加到另一个文件上。
在我的NASM教科书Dandamundi的“Linux汇编程序指南”中,系统调用5(打开文件)使用以下参数进行描述。用int 0x80(访问位?)追加文件
EAX = 5
EBX = file name
ECX = file access mode (read, write, read/write)
EDX = file permissions
它没有说明接入码(八进制,我假设)实际上是什么。 0200Q和02000Q显然不工作。我试图将一个文件的内容附加到另一个文件上。
看着/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
寄存器中。
我觉得这是sys_open
系统调用,这样的参数应该映射一个-to-one的那些open(2):
的论点标志必须包括下列访问模式之一: O_RDONLY, O_WRONLY或O_RDWR。这些请求分别以只读,只写或读/写方式打开文件 。此外,零 以上的文件创建标志和文件状态标志可以在标志按位或运算 。该文件创建标志O_CREAT,O_EXCL,O_NOCTTY和 O_TRUNC。 ...
非常感谢您! 'MOV ECX,02001Q' 作品完美,我的程序工作。 – Matt 2012-03-08 19:54:43