jjzjj

linux - 将自定义结构类型添加到 strace

我正在尝试对通过ioctl系统调用与内核驱动程序交互的用户模式共享对象进行逆向工程。我有一个头文件,其中包含内核驱动程序的ioctl接口(interface)的定义(即ioctl命令编号的#defines,以及发送到ioctl的各种数据的结构定义)。我看到strace能够取消引用传递给系统调用的用户指针,但它显然不能取消引用传递给ioctl的自定义结构。有没有一种简单的方法可以将我的定义添加到strace中,以便我可以获得传递到ioctl中的有意义的数据,而不仅仅是指针地址?我有strace的源代码并已成功编译/安装它,但我尝试包含我自己的header的所有尝试都没有效果。

linux - 如何从用户空间调用 compat ioctl?有人可以提供一些例子吗?

假设我定义了以下内容。#defineMY_IOCTL_CMD1_IOR(MAGIC_NUMBER,0x01,arg1)#defineMY_IOCTL_CMD2_IOW(MAGIC_NUMBER,0x02,arg2)#ifdefCONFIG_COMPAT#defineMY_COMPAT_IOCTL_CMD1_IOR(MAGIC_NUMBER,0x01,compat_arg1)#defineMY_COMPAT_IOCTL_CMD2_IOW(MAGIC_NUMBER,0x02,compat_arg2)#endif现在当我们从用户空间执行ioctl时,我们通常会这样做ioctl(fd,MY_I

linux - 如何从用户空间调用 compat ioctl?有人可以提供一些例子吗?

假设我定义了以下内容。#defineMY_IOCTL_CMD1_IOR(MAGIC_NUMBER,0x01,arg1)#defineMY_IOCTL_CMD2_IOW(MAGIC_NUMBER,0x02,arg2)#ifdefCONFIG_COMPAT#defineMY_COMPAT_IOCTL_CMD1_IOR(MAGIC_NUMBER,0x01,compat_arg1)#defineMY_COMPAT_IOCTL_CMD2_IOW(MAGIC_NUMBER,0x02,compat_arg2)#endif现在当我们从用户空间执行ioctl时,我们通常会这样做ioctl(fd,MY_I

c - 可以使用 ioctl() 将 9 针串行端口用作 "GPIO"吗?

是否可以使用linuxbox上的COM端口来读取开关的值?我认为使用ioctl()应该是可能的,但我费了一番功夫才找到一个可比较的例子。我只需要一个输入,只需要它读取高/低值。我以为我可以只使用ioctl将其中一个引脚设置为高电平,然后在该引脚和另一个引脚之间连接一个开关,再次使用ioctl读取第二个引脚的值()理由是我在车库里运行着一台值得信赖的旧服务器,我想做一些东西,它会发出哔哔声,告诉车库门是否打开,因为服务器就在门旁边,我想它会只需将一个开关连接到com端口(当前未使用)的背面就很简单当然,我可以花几英镑,让自己不再头疼,然后使用arduino或ESP8266,但这让我感到好

c - 可以使用 ioctl() 将 9 针串行端口用作 "GPIO"吗?

是否可以使用linuxbox上的COM端口来读取开关的值?我认为使用ioctl()应该是可能的,但我费了一番功夫才找到一个可比较的例子。我只需要一个输入,只需要它读取高/低值。我以为我可以只使用ioctl将其中一个引脚设置为高电平,然后在该引脚和另一个引脚之间连接一个开关,再次使用ioctl读取第二个引脚的值()理由是我在车库里运行着一台值得信赖的旧服务器,我想做一些东西,它会发出哔哔声,告诉车库门是否打开,因为服务器就在门旁边,我想它会只需将一个开关连接到com端口(当前未使用)的背面就很简单当然,我可以花几英镑,让自己不再头疼,然后使用arduino或ESP8266,但这让我感到好

c - 如何通过 ioctl 调用或其他方式确定 SCSI 设备(例如/etc/sda)是否为磁盘?

如何通过ioctl调用或其他方式确定SCSI设备(例如/dev/sda)是否为磁盘?我已尝试以下操作,但ioctl调用失败。我的/dev/sda是U盘。#include#include#include#include#include#include#include#include#includeintmain(intargc,char**argv){char*dev="/dev/sda";structsg_scsi_idm_id;intrc;intfd;fd=open(dev,O_RDONLY|O_NONBLOCK);if(fd 最佳答案

c - 如何通过 ioctl 调用或其他方式确定 SCSI 设备(例如/etc/sda)是否为磁盘?

如何通过ioctl调用或其他方式确定SCSI设备(例如/dev/sda)是否为磁盘?我已尝试以下操作,但ioctl调用失败。我的/dev/sda是U盘。#include#include#include#include#include#include#include#include#includeintmain(intargc,char**argv){char*dev="/dev/sda";structsg_scsi_idm_id;intrc;intfd;fd=open(dev,O_RDONLY|O_NONBLOCK);if(fd 最佳答案

c - 如何使用 LD_PRELOAD 包装 ioctl(int d, unsigned long request, ...)?

这是我使用LD_PRELOAD包装函数的模板:intgettimeofday(structtimeval*tv,structtimezone*tz){staticint(*gettimeofday_real)(structtimeval*tv,structtimezone*tz)=NULL;if(!gettimeofday_real)gettimeofday_real=dlsym(RTLD_NEXT,"gettimeofday");returngettimeofday_real(tv,tz);}我意识到ioctl似乎具有以下签名:intioctl(intd,unsignedlongre

c - 如何使用 LD_PRELOAD 包装 ioctl(int d, unsigned long request, ...)?

这是我使用LD_PRELOAD包装函数的模板:intgettimeofday(structtimeval*tv,structtimezone*tz){staticint(*gettimeofday_real)(structtimeval*tv,structtimezone*tz)=NULL;if(!gettimeofday_real)gettimeofday_real=dlsym(RTLD_NEXT,"gettimeofday");returngettimeofday_real(tv,tz);}我意识到ioctl似乎具有以下签名:intioctl(intd,unsignedlongre

c - 在 ioctl 中打开的不良副作用是什么?

根据manioctl,使用open打开文件描述符可能会导致不需要的副作用。该手册还指出,使用O_NONBLOCK打开可以解决那些不需要的问题,但我似乎无法找到原因是什么,也不知道实际的副作用是什么。有人可以阐明这一点吗?使用ioctl是否总是可以并等效于*使用O_NONBLOCK打开文件描述符?NOTES(frommanioctl)Inordertousethiscall,oneneedsanopenfiledescriptor.Oftentheopen(2)callhasunwantedsideeffects,thatcanbeavoidedunderLinuxbygivingitt