【发布时间】:2012-04-05 15:53:30
【问题描述】:
我正在编写一个使用 Ptrace 并执行以下操作的程序:
- 它读取当前 eax 并检查系统调用是否为 sys_open。
- 如果是,那么我需要知道传递的参数是什么。
int sys_open(const char * filename, const int mode, const int mask)
所以 eax = 5 意味着它是一个开放的系统调用
我从这个Question 得知 ebx 有文件位置的地址
但是我如何知道文件名的长度以便读取该位置的内容?
我遇到了以下解决相同问题的问题
Question 1
Question 2 (这只是我的问题!)
但是我仍然没有解决我的问题。 :( 因为两个答案都不清楚。
当我尝试 Question-1 中的方法时,我仍然遇到分段错误
你可以查看我的代码here
所以现在我真的很想知道 strace 是如何如此精美地提取这些值的:(
【问题讨论】:
-
如果您愿意深入研究代码,可以在strace.git.sourceforge.net/git/gitweb.cgi?p=strace/… 上自行查找——grepping
sys_open可能是一个好的开始。 -
strace的源码你仔细研究了吗?你试过strace strace true吗? -
我在尝试编译您的代码时遇到了一些编译错误。 ideone.com/SQie4。我认为您也需要粘贴
helper.h的代码 -
@che: [pastie.org/3639780] 这有我的 helper.h,它实际上有标题。抱歉忘记了:(
-
我没有尝试 strace strace true。等我谷歌吧
标签: c linux system-calls strace ptrace