我刚刚从 USB 闪存驱动器复制了一个目录。我从 NTFS 驱动器复制它,因此所有文件都具有执行权限。
我执行chmod -x *
撤消执行权限。尽管如此,所有目录都以绿色背景显示,这通常仅用于可执行文件。
可能是什么原因?
附图片:
就我的理解而言,用户空间程序以非特权模式运行,因此无法直接访问内存或 I/O。
那么当我们在用户空间程序中映射 /dev/mem 时,我们究竟如何直接访问内存或 I/O 位置呢?
例如:
int fd = 0;
u8 leds = 0;
fd = open("/dev/mem", O_RDWR|O_SYNC);
leds = (u8 *)mmap(0, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0x80840000);
Run Code Online (Sandbox Code Playgroud)
这是一种在嵌入式设备中非常常用的 hack。
现在leds
可以动态使用该变量来访问可能存在于 0x80840000 处的任何设备。
我们将不再使用任何系统调用来访问该地址。
甚至像
leds[0x20] = val;
Run Code Online (Sandbox Code Playgroud)
会工作。
但是特权操作,例如直接从 I/O 地址读/写,应该只有通过系统调用将处理器置于特权模式才能实现。
来源。