【发布时间】:2012-04-04 16:12:54
【问题描述】:
我已经发布了以下Question 得到了解决方案并继续前进
我正在使用 ptrace 来查找传递给系统调用的所有参数。
该程序正在获取我在 ebx、ecx、edx 中的值。现在对于一个开放的系统调用,我得到了 foll
SYSCALL 5: ebx :bf9748af ecx: 00008000 edx: 00000000 /open
系统调用 5:ebx:80485b3 ecx:00000242 edx:000001b6 /open
我使用了 strace,它神奇地将上面的内容转换成这样:
open("test.txt", O_RDONLY|O_LARGEFILE) = 3
open("test.txt", O_RDWR|O_CREAT|O_TRUNC, 0666) = 3
如何手动执行此操作?有什么地方可以找到 O_LARGEFILE 的值吗?
我搜索了很多,发现了this,但它并不具备一切。还尝试阅读 strace 代码,但没有遇到此转换的代码。
如果有人可以帮助我,那将对我非常有帮助。另外,如果您知道这是在 strace 中写的,我想看看它。提前致谢。
【问题讨论】:
-
我阅读了
man 2 open并发现 open 执行按位或但我仍然没有得到完整的图片:( -
你又想做什么??
-
@UmNyobe:我想知道如何将
242值转换为O_RDWR | O_CREAT | O_TRUNC -
@nos:在手册页中,它告诉我您可以使用哪些标志,例如
O_RDWR等,但是当这些在寄存器中传递时,值是长整数。 (ebx,ecx 中的值)等,我想将整数值解释为这些未提及的标志。 -
我希望你知道这些值在 Linux 发行版中无论如何都没有标准化......
标签: c linux system-calls strace ptrace