来自维基百科:
long
:长签名整数类型。能够至少包含[-2,147,483,647,+ 2,147,483,647]范围;因此,它的大小至少为32位。
来自man ptrace
:
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
请记住,有符号溢出是C中未定义的行为.x86_64上的寄存器存储64位值。
在x86_64上用ORIG_RAX
读取寄存器的内容(例如ptrace
)是不安全的吗?
答案 0 :(得分:2)
UIScrollView
。它可以在Linux和其他一些系统上使用,所有这些系统都有共同点,它们使用ptrace()
上的LP64 data model。使用这些平台,您拥有 64位x86_64
。所以,这是安全的。
(另一方面,Windows使用LLP64,long
仅long long
为64位)
答案 1 :(得分:0)
当您ptrace
之类的内容时,您并不是在谈论C标准。您已修复目标/平台/体系结构(/ compiler)。这些东西修复了实现。
在此实现中,定义的行为是安全的(因为它使用64位大小的long
)。
所以不,这不是不安全的。但是如果您只是复制已编译的二进制文件并在另一个目标上使用它将是不安全的。