我已经发布了以下Question得到了解决方案并向前推进了
我正在使用ptrace来查找传递给系统调用的所有参数。
该程序正在ebx,ecx,edx中获取值。现在开放系统调用我得到了foll
SYSCALL 5:ebx:bf9748af ecx:00008000 edx:00000000 / open
SYSCALL 5:ebx:80485b3 ecx:00000242 edx:000001b6 / open
我使用了strace,它神奇地将上面的内容转换成这样:
打开(" test.txt",O_RDONLY | O_LARGEFILE)= 3
打开(" test.txt",O_RDWR | O_CREAT | O_TRUNC,0666)= 3
我该如何手动执行此操作?我有什么地方可以找到O_LARGEFILE的值吗?我搜索了很多并遇到了this但它没有一切。还试过阅读strace代码,但没有遇到此转换的代码。
如果有人可以帮助我,那对我来说会很有帮助。另外如果你知道这是用strace写的,我想看看它。提前谢谢。
答案 0 :(得分:1)
O_LARGEFILE
是特定于实现的,并在LSB(Linux标准库)中定义为
0100000
), 0x8000
(等于fcntl.h
)
参见LSB参考:
http://linuxbase.org/navigator/browse/constant.php?cmd=list-by-name&Cname=O_LARGEFILE
O_RDONLY
值为0
,O_RDONLY | O_LARGEFILE
则等于0x8000
。
答案 1 :(得分:1)
您可以从this header file
中读出这些值#define O_ACCMODE 0003
#define O_RDONLY 00
#define O_WRONLY 01
#define O_RDWR 02
#define O_CREAT 0100 /* not fcntl */
#define O_EXCL 0200 /* not fcntl */
#define O_NOCTTY 0400 /* not fcntl */
#define O_TRUNC 01000 /* not fcntl */
#define O_APPEND 02000
#define O_NONBLOCK 04000
#define O_NDELAY O_NONBLOCK
#define O_SYNC 010000
#define O_FSYNC O_SYNC
#define O_ASYNC 020000
但可行的方法是使用宏来表示这些值。