【发布时间】:2012-04-03 21:21:33
【问题描述】:
我编写了一个程序来列出由命令(例如 /bin/ls)执行的所有系统调用。现在我要做的是找到所有可能传递给它的系统调用参数、环境变量、命令行参数
示例:如果我打开一个文件。系统调用 sys_access 会打开文件吗?但是如何获得这些值呢?
想要对系统调用(如打开、读取、写入、关闭)执行此操作。
根据我的研究,这些必须在寄存器中 (ebx - edx) 如果是这样,这些寄存器值意味着什么?
我得到了这个link。
但我真的无法从那里得到什么。此外,对此的任何进一步参考都会很有帮助。
【问题讨论】:
-
@dbrank0:非常感谢。确实有帮助。但我还有一个问题。我之前程序的输出是这样的
codeSYSCALL 33: ebx :004c48de ecx: 00000000 edx: 004c8ff4 /access RETURN 33: fffffffe 这里的值是十六进制的。那么我该如何理解呢?我是一个菜鸟程序员。对不起我的无知 -
文件名存储在 0x4c48de,模式为 0(参见模式标志定义),edx 不相关并包含未定义的内容,返回值为 -2(它抱怨只读文件系统)。
-
@dbrank0 应该添加一个答案,因为他帮助您解决了问题。
-
strace正在做你想做的事。你可以使用它,或者研究它的源代码。
标签: c linux system-calls ptrace