1

当我使用 strace 分析 sgx 进程时,在 mmap 函数之后多次调用 ioctl 函数,如下所示。

1424  11:18:56 mmap(NULL, 4194304, PROT_NONE, MAP_SHARED, 4, 0) = 0x7f7e6a800000
1424  11:18:56 ioctl(4, _IOC(_IOC_WRITE, 0xa4, 0x00, 0x08), 0x7ffdadb760b0) = 0
1424  11:18:56 ioctl(4, _IOC(_IOC_WRITE, 0xa4, 0x01, 0x1a), 0x7ffdadb76f00) = 0
1424  11:18:56 ioctl(4, _IOC(_IOC_WRITE, 0xa4, 0x01, 0x1a), 0x7ffdadb76f00) = 0
1424  11:18:56 ioctl(4, _IOC(_IOC_WRITE, 0xa4, 0x01, 0x1a), 0x7ffdadb76f00) = 0
1424  11:18:56 ioctl(4, _IOC(_IOC_WRITE, 0xa4, 0x01, 0x1a), 0x7ffdadb76f00) = 0

有谁知道为什么这个函数被调用这么多次?

这个功能是什么意思?

4

1 回答 1

0

许多东西不是添加自定义系统调用,而是ioctl在“设备”FD上用作用户空间与内核通信的一种方式。将其视为特定于设备的系统调用。

在这个 SGX 的具体案例中,我不知道它具体在做什么,但看到很多 ioctl 并不罕见。例如,声卡驱动程序也使用了很多ioctl.

最初ioctl主要用于 TTY 文件描述符上的终端 I/O 设置,例如规范与原始,以及哪些特殊字符做了什么,以及串行端口速度。但正如我所说,其他类型的设备驱动程序已将其用作添加新系统调用的替代方法。

于 2020-01-03T08:00:19.120 回答