加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在运行时检查内存地址是否可写?

发布时间:2020-12-15 21:09:07 所属栏目:安全 来源:网络整理
导读:如何在运行时检查内存地址是否可写? 例如,我想在以下代码中实现is_writable_address.可能吗? #include stdio.hint is_writable_address(void *p) { // TODO}void func(char *s) { if (is_writable_address(s)) { *s = 'x'; }}int main() { char *s1 = "foo
如何在运行时检查内存地址是否可写?

例如,我想在以下代码中实现is_writable_address.可能吗?

#include <stdio.h>

int is_writable_address(void *p) {
    // TODO
}

void func(char *s) {
    if (is_writable_address(s)) {
        *s = 'x';
    }
}

int main() {
    char *s1 = "foo";
    char s2[] = "bar";

    func(s1);
    func(s2);
    printf("%s,%sn",s1,s2);
    return 0;
}

解决方法

我通常同意那些暗示这是一个坏主意的人.

也就是说,鉴于问题具有UNIX标记,在类UNIX操作系统上执行此操作的经典方法是使用/ dev / zero中的read():

#include <fcntl.h>
#include <unistd.h>

int is_writeable(void *p)
{
    int fd = open("/dev/zero",O_RDONLY);
    int writeable;

    if (fd < 0)
        return -1; /* Should not happen */

    writeable = read(fd,p,1) == 1;
    close(fd);

    return writeable;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读