gpt4 book ai didi

c - strace如何读取系统调用sys_open的文件名?

转载 作者:IT王子 更新时间:2023-10-29 01:24:25 25 4
gpt4 key购买 nike

我正在编写一个使用 Ptrace 并执行以下操作的程序:

  • 它读取当前的 eax 并检查系统调用是否为 sys_open。
  • 如果是,那么我需要知道传递的参数是什么。

    int sys_open(const char * filename, const int mode, const int mask)

所以 eax = 5 意味着它是一个开放的系统调用
我从这个 Question 开始知道 ebx 有文件位置的地址但是我如何知道文件名的长度以便我可以读取该位置的内容?
我遇到了以下解决相同问题的问题
Question 1
Question 2 (这只属于我!)
但是我仍然没有解决我的问题。 :( 因为两个答案都不清楚。当我尝试问题 1 中的方法时,我仍然遇到段错误
你可以查看我的代码here
所以现在我真的很想知道 strace 如何如此漂亮地提取这些值:(

最佳答案

如您所知,sys_open() 不接收文件名的大小作为参数。但是,该标准规定文字字符串必须以 \0 字符结尾。这是个好消息,因为现在我们可以执行一个简单的循环来遍历字符串的字符,当我们找到 \0 (NULL) 字符时,我们知道我们已经到达了它的末尾。

这是标准程序,就是这样strlen()这样做,以及如何strace做到了!

C 示例:

#include <stdio.h>

int main()
{
const char* filename = "/etc/somefile";

int fname_length = 0;
for (int i = 0; filename[i] != '\0'; i++)
{
fname_length++;
}

printf("Found %d chars in: %s\n", fname_length, filename);

return 0;
}

回到手头的任务,您必须访问 filename 的地址并执行我刚才描述的过程。这是你必须要做的事情,没有别的办法。

关于c - strace如何读取系统调用sys_open的文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9799373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com