A-B*_*A-B 5 linux stack-overflow rust
我试图了解 Rust 中的堆栈溢出处理程序。recursive_stack()我编写了一次又一次声明一些局部变量的函数以耗尽堆栈空间。
extern crate nix;
use nix::sys::signal;
extern "C" fn handle_sigsegv(_: i32) {
//Do something here
}
fn main() {
let sig_action = signal::SigAction::new(
signal::SigHandler::Handler(handle_sigsegv),
signal::SaFlags::SA_NODEFER,
signal::SigSet::empty(),
);
unsafe {
signal::sigaction(signal::SIGSEGV, &sig_action);
}
println!("Before function");
recursive_stack();
println!("After function");
}
fn recursive_stack() {
let _array: [i64; 50] = [0; 50];
recursive_stack();
}
Run Code Online (Sandbox Code Playgroud)
我想捕获信号并执行我的信号处理程序。如果我注册信号处理程序,我会收到“分段错误(核心已转储)”消息。如果我不注册信号处理程序,则会收到堆栈溢出消息。
如果我将其注册为信号,则该信号处理程序工作正常SIGINT,但会给出奇怪的结果SIGSEGV。我缺少什么?
我在 Ubuntu 18.04 上运行这个程序。
| 归档时间: |
|
| 查看次数: |
1726 次 |
| 最近记录: |