我正在尝试从头开始实现X.509证书生成器(我知道现有的,但我需要另一个).我无法理解的是如何计算证书的SHA-1(或任何其他)指纹.
在RFC5280说,输入签名功能是DER编码即tbsCertificate场.不幸的是,我计算的哈希值与OpenSSL产生的哈希值不同.这是一个循序渐进的例子.
openssl x509 -fingerprintsha1sum实用程序计算其哈希值现在,我在第2步和第3步得到的哈希值是不同的.有人可以给我一个暗示我可能做错了吗?
我正在开发一个基于Cortex-M3的自定义设备,我需要实现应用程序内编程(IAP)机制,这样就可以在没有JTAG的情况下更新设备固件(我们将使用TFTP或HTTP).虽然ST Microelectronics提供的与IAP相关的代码示例对我来说足够清楚,但我并不真正了解重新闪存的工作原理.
据我所知,CPU通过ICode总线(当然还有预取块)从Flash获取指令.所以,这是我非常愚蠢的问题:为什么运行程序在重新闪烁时会被破坏(即更改运行它的闪存)?
我正在尝试为源代码树设置基于CMake的并行构建,但是当我发布时
$ cmake .
$ make -j2
Run Code Online (Sandbox Code Playgroud)
我明白了:
jobserver unavailable: using -j1. Add '+' to parent make rule
Run Code Online (Sandbox Code Playgroud)
作为警告.有没有人知道是否有可能以某种方式修复它?
我正在为某个基于ARM的Linux板(实际上是一个自定义UART驱动程序)实现自定义串行总线驱动程序.该驱动程序应通过自定义协议启用与总线另一端的某个MCU的通信.驱动程序不会(实际上也不能)将其任何功能暴露给用户空间,也不可能在用户空间中实现它(因此,需要自定义驱动程序而不是使用库存TTY子系统).
司机将实现通信协议和UART读/写,并有一组更高级别的功能,导出到它的用户,让他们与MCU通信(例如read_register(),drive_gpios()所有这些东西).该模块只有一个用户.
呼叫模块必须等待操作的完成(前述read_register()和其他).我正在考虑使用信号量:用户模块将调用我的驱动程序的函数,它将启动传输并等待信号量; 我的驱动程序的IRQ处理程序将向MCU发送请求并读取答案,并在完成后发布到信号量,从而唤醒调用模块.但我对内核编程并不熟悉,而且我对众多可能的替代实现(tasklets?等待队列?)感到困惑.
问题是:我的基于信号量的方法是好还是太天真了?有哪些可能的选择?我可能会遗失任何陷阱吗?
我正在使用-pedanticflag 构建我的程序,这会导致extra ';'错误(因为第三方标头使用了一些不一致的宏;当-pedantic关闭时不会显示错误).我真的不想-pedantic关闭,我也不想编辑标题.有没有办法抑制这个确切的错误?像-Wno-annoying-semicolon-error编译器开关或什么?
我对我经常遇到的情况有疑问.我不时要实现各种基于TCP的协议.它们中的大多数定义了以公共头([包ID,长度,有效载荷]或类似的东西)开头的可变长度数据包.显然,可以有两种方法来读取这些数据包:
显然,第一种方法很简单,但需要两次调用read()(或可能更多).第二个稍微复杂一点,但需要较少的电话.
问题是:第一种方法是否会严重影响性能以至于担心它?
我正在为Windows开发一个简单的流程统计信息收集库.我正在使用EnumProcesses()函数枚举进程,并尝试OpenProcess()使用PROCESS_QUERY_INFORMATION标志调用它们.但是后者却因一堆系统进程而失败.与此同时,我发现类似的应用程序(sysinternals工具,任务管理器等)似乎能够检索有关这些进程的信息,即使不需要管理员权限.我尝试启用SeDebugPrivilege权限,但只有当我以管理员身份运行程序时它才有用 - 而且,我无法打开空闲进程,系统进程和audiodg进程(我希望能够检索他们的信息也是一致的).
所以问题是:我怎样才能获得有关所有进程的信息(我看到它是由第三方应用程序完成的,但我看不到如何)?没有管理员权限可以做到吗?
我有一个包含字节数组的结构。这个结构实际上来自bindgen生成的FFI绑定,它的大小是使用宏在C代码中定义的,即:
C代码:
#define FOO_SIZE 100
struct the_struct
{
char foo[FOO_SIZE];
/* other fields... */
};
Run Code Online (Sandbox Code Playgroud)
生成的 FFI 绑定:
pub struct the_struct {
pub foo: [::std::os::raw::c_char; 100usize],
// other fields...
}
Run Code Online (Sandbox Code Playgroud)
我想确保来自 Rust API 端的数据适合foo. 我也不想FOO_SIZE在 Rust API 中进行硬编码,因为它可能会发生变化。
我知道这可以通过首先实例化结构来完成,但话又说回来,这需要显式初始化foo,这在不知道其大小的情况下似乎是不可能的。此外,这是我想避免的额外步骤。
foo是否可以在不实例化结构的情况下以某种方式静态获取大小?如果不是,最好的方法是什么?更改 C 代码不是一个选项。
我一直在研究RFC 1928,但 BIND 操作的描述对我来说并不清楚。据我了解,设置顺序描述如下:
我不太清楚的是步骤 5。之后我是否必须重新请求 BIND 以允许更多传入连接?
据我了解,相同的 TCP 连接(在步骤 3 中建立)用于与接受的对等方进行通信。如果我需要继续接受同一地址:端口上的连接怎么办?毕竟这可能吗?
我目前正在开发自定义的跨平台文件服务器(C ++,boost)。显然,它将对硬盘进行大量读取和写入。为了使事情更复杂,它还将成为多线程并使用异步套接字I / O(带有asio)。
现在,我想知道,是否可以使用任何众所周知的实践,模式或方法?也许一些现有的图书馆或什么?当然,我可以尝试从头开始开发它,但确实感觉像是在重新发明轮子。任何通用建议也将不胜感激。
我发现PhantomDataRust 中的概念非常混乱。我广泛使用它来限制基于 FFI 的代码中的对象生命周期,但我仍然不确定我是否正确执行此操作。
这是我经常如何使用它的人为示例。例如,我不希望 的实例MyStruct比 的实例寿命更长Context:
// FFI declarations and types
mod ffi {
use std::ffi::c_void;
pub type handle_t = *const c_void;
// ...
}
// A wrapper structure for some context created and maintained
// inside the C library
struct Context {
// ...
}
// Handle is only valid as long as the Context is alive.
// Hence, I use the PhantomData marker to constrain its lifetime.
struct MyStruct<'a> {
marker: …Run Code Online (Sandbox Code Playgroud) 获取序列的第一个和最后一个元素的最简单,最简洁的方法是什么?例如,我有一个序列[1, 2, 3, 4, 5],我想[1, 5]通过某种切片魔法.到目前为止我想出的是:
l = len(s)
result = s[0:l:l-1]
Run Code Online (Sandbox Code Playgroud)
我实际上需要这个更复杂的任务.我有一个3D numpy数组,它是立方的(即大小为NxNxN,其中N可能会有所不同).我想要一种简单快捷的方法来获取包含源数组顶点值的2x2x2数组.上面的例子是我的任务的过度简化的1D版本.
c ×4
embedded ×2
ffi ×2
rust ×2
arm ×1
boost ×1
boost-asio ×1
build ×1
c++ ×1
cmake ×1
cortex-m3 ×1
driver ×1
encryption ×1
g++ ×1
gcc ×1
io ×1
linux ×1
makefile ×1
networking ×1
openssl ×1
proxy ×1
python ×1
python-3.x ×1
rfc ×1
rust-bindgen ×1
sockets ×1
socks ×1
stm32 ×1
tcp ×1
winapi ×1
windows ×1
windows-7 ×1
x509 ×1