Last active
February 15, 2023 22:50
-
-
Save matu3ba/c5f3b2995095705a6eec0584484155d6 to your computer and use it in GitHub Desktop.
Breaking Zigs default panic handler
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Segmentation fault at address 0x3e800033cc6 | |
/home/user/dev/git/zi/zig/master/build/stage3/lib/zig/std/os/linux/x86_64.zig:36:5: 0x22d97c in syscall2 | |
(stacking_panics) | |
return asm volatile ("syscall" | |
^ | |
/home/user/dev/git/zi/zig/master/build/stage3/lib/zig/std/os/linux.zig:991:49: 0x20f19f in nanosleep (sta | |
cking_panics) | |
return syscall2(.nanosleep, @ptrToInt(req), @ptrToInt(rem)); | |
^ | |
/home/user/dev/git/zi/zig/master/build/stage3/lib/zig/std/os.zig:5253:39: 0x20b681 in nanosleep (stacking | |
_panics) | |
switch (errno(system.nanosleep(&req, &rem))) { | |
^ | |
/home/user/dev/git/tryzig/stacking_panics.zig:19:25: 0x20b3b4 in t1Exec (stacking_panics) | |
std.os.nanosleep(0, 1_000); | |
^ | |
/home/user/dev/git/tryzig/stacking_panics.zig:10:15: 0x20b720 in main (stacking_panics) | |
try t1Exec(); | |
^ | |
/home/user/dev/git/zi/zig/master/build/stage3/lib/zig/std/start.zig:616:37: 0x20ad89 in posixCallMainAndE | |
xit (stacking_panics) | |
const result = root.main() catch |err| { | |
^ | |
/home/user/dev/git/zi/zig/master/build/stage3/lib/zig/std/start.zig:376:5: 0x20a7f1 in _start (stacking_p | |
anics) | |
@call(.never_inline, posixCallMainAndExit, .{}); | |
^ | |
Abgebrochen (Speicherabzug geschrieben) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
raised 2526 signals | |
raised 2527 signals | |
raised 2528 signals | |
raised 2529 signals | |
raised 2530 signals | |
raised 2531 signals | |
raised 2532 signals | |
raised 2533 signals | |
raised 2534 signals | |
raised 2535 signals | |
raised 2536 signals | |
raised 2537 signals | |
raised 2538 signals | |
raised 2539 signals | |
raised 2540 signals | |
raised 2541 signals | |
raised 2542 signals | |
raised 2543 signals | |
raised 2544 signals | |
raised 2545 signals | |
raised 2546 signals | |
raised 2547 signals | |
raised 2548 signals | |
raised 2549 signals | |
raised 2550 signals | |
raised 2551 signals | |
raised 2552 signals | |
raised 2553 signals | |
raised 2554 signals | |
raised 2555 signals | |
raised 2556 signals | |
raised 2557 signals | |
raised 2558 signals | |
raised 2559 signals | |
raised /home/misterspoon/dev/git/zi/zig/master/build/stage3/lib/zig/std/start.zig2560: signals | |
376:raised 52561 signals | |
: raised 25620x signals | |
20a8e1raised in 2563_start signals | |
(stacking_panicsraised )2564 signals | |
raised 2565 signals | |
raised 2566 signals | |
raised 2567 signals | |
raised 2568 signals | |
raised 2569 signals | |
raised 2570 signals | |
raised 2571 signals | |
raised 2572 signals | |
raised 2573 signals | |
raised 2574 signals | |
raised 2575 signals | |
raised 2576 signals | |
raised 2577 signals | |
raised 2578 signals | |
raised 2579 signals | |
raised 2580 signals | |
raised 2581 signals | |
raised 2582 signals | |
raised 2583 signals | |
@craised a2584l signals | |
l(raised .2585n signals | |
eraised v2586e signals | |
r_raised i2587n signals | |
liraised n2588e signals | |
, raised p2589o signals | |
siraised x2590C signals | |
alraised l2591M signals | |
airaised n2592A signals | |
ndraised E2593x signals | |
iraised t2594, signals | |
.raised {2595} signals | |
);raised | |
2596 signals | |
raised ^2597 | |
signals | |
raised 2598 signals | |
raised 2599 signals | |
raised Abgebrochen (Speicherabzug geschrieben) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//! Stacking panics example to break Zig panic handler. | |
//! principle threads t1, t2 | |
//! - t1 tells t2 its pid | |
//! - t1 waits blocking + sleeping | |
//! - t2 signals continuously t1 leading to panic during panic situation | |
const std = @import("std"); | |
pub fn main() !void { | |
try t1Exec(); | |
} | |
fn t1Exec() !void { | |
const pid_t1: std.os.pid_t = @intCast(i32, std.Thread.getCurrentId()); | |
const t2 = try std.Thread.spawn(.{}, t2Exec, .{pid_t1}); | |
t2.detach(); | |
// busy sleeping | |
while (true) { | |
std.os.nanosleep(0, 1_000); | |
} | |
} | |
fn t2Exec(pid_t1: std.os.pid_t) void { | |
// content 1 | |
// const res = std.os.linux.tgkill(pid_t1, pid_t1, std.os.SIG.SEGV); | |
// std.debug.assert(res == 0); | |
// content 2 | |
var cnt: u64 = 0; | |
while (true) { | |
// t1 is group leader = "master thread" | |
const res = std.os.linux.tgkill(pid_t1, pid_t1, std.os.SIG.SEGV); | |
std.debug.print("raised {d} signals\n", .{cnt}); | |
std.debug.assert(res == 0); | |
// std.os.nanosleep(0, 1_000); | |
cnt += 1; | |
} | |
} | |
// zig build-exe stacking-panics.zig && stacking-panics |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment