小编PiR*_*cks的帖子

Rust OSError 22,将有效数据写入套接字时参数无效

我很难理解为什么我的程序中在网络上发送 ICMP 回显请求的部分会出现此错误。最重要的是,我可以通过让套接字处理 IP 标头来使其工作,但是当我设置 IP_HDRINCL 选项并为其提供有效的 IP 标头时,它会返回 EINVAL 错误:

initialize
using interface en0 with ip 192.168.1.126 and mac a4:83:e7:43:40:81.
Input start ip/scan range: 192.168.1.1
[45, 0, 0, 1c, 20, 1, 40, 0, 40, 1, 97, 10, c0, a8, 1, 7e, c0, a8, 1, 1, 8, 0, 22, 2a, 97, 3e, 3e, 97]
[69, 0, 0, 28, 32, 1, 64, 0, 64, 1, 151, 16, 192, 168, 1, 126, 192, 168, 1, 1, 8, 0, 34, 42, 151, 62, …
Run Code Online (Sandbox Code Playgroud)

sockets ip icmp rust

8
推荐指数
0
解决办法
2414
查看次数

禁用类证书信息检查 (Java)

我创建了一个库,它将 jar 直接加载到当前类路径中以启动其类之一。但注入的 jar 包含证书,所以我收到此错误:

java.lang.SecurityException: class "TestClass" signer information does not match signer information of other classes in the same package
Run Code Online (Sandbox Code Playgroud)

这很正常,但我无法摆脱它。这是正常的,因为两个不同的 jar 正在“冲突”,但是,我无法删除 JAR 的证书,因为它是第三方的。

那么,我可以禁用类证书检查吗?或者做一些事情来消除这个错误?

我想我需要覆盖该ClassLoader.checkCerts方法......但这很脏......

java jvm classloader

5
推荐指数
1
解决办法
800
查看次数

如何将 RangeInclusive 转换为 Range?

显然我可以做这样的事情:

impl From<RangeInclusive<u32>> for Range<u32>{
    fn from(r: RangeInclusive<u32>) -> Self {
        (*r.start()..(r.end()+1))
    }
}

Run Code Online (Sandbox Code Playgroud)

但是我想知道是否已经有一个标准函数?(快速谷歌后我无法在文档/中找到任何内容)。如果不是,如何为每个 num 类型实现这一点,并且这样的实现是否会受到 Rust 的欢迎,或者是否有一个原因尚未实现?

range rust

5
推荐指数
1
解决办法
1224
查看次数

Java 外来标识符的状态

在查看Java 调用动态文档时,我看到了以下 Java 特性示例,称为“exotic identifiers”:

int #"strange variable name" = 42;
System.out.println(#"strange variable name");  // prints 42
Run Code Online (Sandbox Code Playgroud)

我无法让它在我的机器上的 openjdk8 上工作。进一步的谷歌搜索发现了一些与此功能相关的错误报告,但没有其他太多。特别是这个错误,以及这个其他错误

这里的另一个错误表明此功能已在 jdk7 中删除/从未删除。

这是以前的 Java 功能,后来被删除了,还是从来没有正式的 Java 功能?这会被添加回来吗?

java jls language-lawyer java-7 java-8

5
推荐指数
1
解决办法
75
查看次数

如何在 Rust 结构中创建线程局部变量?

我需要一个线程局部变量,理想情况下存储在一个结构中,该结构当前存储了我程序的大部分全局状态。

我可以看到的第一种方法是使用thread_local!宏,但是我想将此线程保留在我的状态结构中。

我可以看到实现这一点的第二种方法是HashMap<Thread,MyThreadLocalData>在线程和我的线程局部变量的值之间有一个或类似的。然后我将有一个thread::current用于查找适当值的吸气剂。

我应该提到的最后一个要求是,并非给定程序中的所有线程都是由 Rust 代码创建的,但是 Rust 代码可以在任何线程上运行,因此解决方案应该对此具有鲁棒性。

有没有这样做的最佳实践方法?也许有一个threadId可以让我使用简单Vec而不是一个HashMap(和/或避免散列开销)?有图书馆吗?

另一种选择是修改可以在多线程上下文中使用的每个函数的参数,以采用状态结构和线程本地状态结构,但是这对于不是由 Rust 创建的线程来说并不容易。

multithreading thread-local rust

4
推荐指数
1
解决办法
2991
查看次数

在代码执行时,以未对齐的方式写入机器代码中的立即数操作数是否安全?

假设我有如下所示的 x86-64 代码(尽管这个问题更普遍地适用于所有代码):

mov rbx,7F0140E5247Dh
jmp rbx
Run Code Online (Sandbox Code Playgroud)

如果目标值未对齐,而该代码可以执行,则覆盖目标常量是否安全?换句话说,我可以观察到部分更新的跳转目标,从而导致跳转到不存在的地址吗?此外,如果目标常量跨越页面或缓存行边界,这是否安全?

编辑:

我只对更改单个指令感兴趣,而不是更改指令边界位置。

x86 assembly jit atomic self-modifying

3
推荐指数
1
解决办法
124
查看次数

rust 内联 asm 中的向量寄存器:无法使用 `Simd&lt;i64, 8&gt;` 类型的值进行内联汇编

编译以下内联汇编:

#![feature(portable_simd)]

use std::simd::{i64x8, f64x8};
use std::arch::asm;


pub fn convert(a: i64x8) -> f64x8{
    let converted: f64x8;
    unsafe {
        asm!(
        "vcvtqq2pd {converted} {a}",
        a = in(zmm_reg) a,
        converted = out(zmm_reg) converted,
        );
    }
    converted
}


Run Code Online (Sandbox Code Playgroud)

导致错误:

error: cannot use value of type `Simd<i64, 8>` for inline assembly
  --> <source>:12:25
   |
12 |         a = in(zmm_reg) a,
   |                         ^
   |
   = note: only integers, floats, SIMD vectors, pointers and function pointers can be used as arguments for inline assembly

error: cannot use …
Run Code Online (Sandbox Code Playgroud)

assembly inline-assembly rust

3
推荐指数
1
解决办法
216
查看次数

关于 JVM 规范中引用大小的混淆

JVM 规范声明引用只占用一个局部变量槽(jvms12 2.6.1)。此外,它指出doubleandlong占用两个局部变量槽,因为它们是 64 位的。

这是否意味着所有 JVM 兼容的实现都必须使用 32 位寻址?64 位 JVM 如何处理这个问题?他们使用 64 位局部变量槽,还是使用 2 个槽作为引用?

java jvm specifications

2
推荐指数
1
解决办法
132
查看次数