From 3305f70f7702deb43d0bd65c7ed3a1c161f73f28 Mon Sep 17 00:00:00 2001 From: guochao Date: Wed, 1 Nov 2023 21:53:20 +0800 Subject: [PATCH] fix seccomp and add tracing-mode project feature --- .vscode/launch.json | 4 +- .vscode/settings.json | 5 + Cargo.lock | 124 ++++ Cargo.toml | 6 +- README.md | 14 + build.rs | 4 + flake.nix | 7 +- src/main.rs | 145 ++++- x2t-sandbox-rulegen/Cargo.toml | 2 + x2t-sandbox-rulegen/src/lib.rs | 11 +- x2t-syscalls.txt | 1045 -------------------------------- 11 files changed, 298 insertions(+), 1069 deletions(-) create mode 100644 .vscode/settings.json delete mode 100644 x2t-syscalls.txt diff --git a/.vscode/launch.json b/.vscode/launch.json index ff6ac83..aff7cee 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -20,7 +20,9 @@ "kind": "bin" } }, - "args": [], + "args": [ + "/usr/bin/ls" + ], "cwd": "${workspaceFolder}", "env": { "RUST_LOG": "DEBUG" diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..688e182 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "rust-analyzer.cargo.features": [ + "tracing-mode" + ] +} \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 2e40034..70ad32b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,6 +11,54 @@ dependencies = [ "memchr", ] +[[package]] +name = "anstream" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" + +[[package]] +name = "anstyle-parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" +dependencies = [ + "anstyle", + "windows-sys", +] + [[package]] name = "anyhow" version = "1.0.75" @@ -35,6 +83,52 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "clap" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + [[package]] name = "env_logger" version = "0.10.0" @@ -58,6 +152,12 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "hermit-abi" version = "0.3.3" @@ -200,6 +300,23 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "syn" +version = "2.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "termcolor" version = "1.3.0" @@ -215,6 +332,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "winapi" version = "0.3.9" @@ -317,6 +440,7 @@ name = "x2t-sandbox" version = "0.1.0" dependencies = [ "anyhow", + "clap", "env_logger", "libseccomp", "log", diff --git a/Cargo.toml b/Cargo.toml index dca59b5..2bd5e09 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,12 +12,16 @@ members = [ [dependencies] anyhow = "1.0.75" +clap = { version = "4.4.7", features = ["derive"] } env_logger = "0.10.0" libseccomp = "0.3.0" log = "0.4.20" -nix = { version = "0.27.1", features = [ "process" ] } +nix = { version = "0.27.1", features = [ "process", "ptrace", "signal" ] } x2t-sandbox-rulegen = { path = "./x2t-sandbox-rulegen" } [build-dependencies] anyhow = "1.0.75" pkg-config = "0.3.27" + +[features] +tracing-mode = ["x2t-sandbox-rulegen/no-fail"] diff --git a/README.md b/README.md index 1ab39e3..300e863 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,20 @@ cargo build cargo run ``` +### Generate syscalls with strace + +``` +strace -f --output x2t-syscalls.txt /path/to/x2t some.xml +``` + +### Generate syscalls with tracing mode + +cargo 开启 tracing-mode 后,宏找不到环境变量和文件不会失败,可以直接生成一个。 + +``` +cargo run --features tracing-mode -- -l x2t-syscalls.txt /path/to/x2t some.xml +``` + ## 项目结构 - [项目](/) diff --git a/build.rs b/build.rs index ee782ac..82050cd 100644 --- a/build.rs +++ b/build.rs @@ -1,5 +1,9 @@ fn main() -> anyhow::Result<()> { pkg_config::probe_library("libseccomp")?; + println!("cargo:rerun-if-changed=x2t-syscalls.txt"); + println!("cargo:rerun-if-env-changed=X2T_SYSCALLS_FILE"); + println!("cargo:rerun-if-env-changed=X2T_SYSCALLS"); + Ok(()) } diff --git a/flake.nix b/flake.nix index ad9a57e..b7e3915 100644 --- a/flake.nix +++ b/flake.nix @@ -45,7 +45,7 @@ }; buildWithPackages = pkgs: pkgsStatic: (buildRustPlatform pkgsStatic).buildRustPackage rec { - pname = "hello"; + pname = "x2t-sandbox"; version = "1.0.0"; nativeBuildInputs = buildTools pkgs; @@ -72,9 +72,10 @@ pkgs = import nixpkgs { inherit system; }; in rec { - hello = buildWithPackages pkgs pkgs.pkgsStatic; + x2t-sandbox-musl = buildWithPackages pkgs pkgs.pkgsStatic; + x2t-sandbox-glibc = buildWithPackages pkgs pkgs; - default = hello; + default = x2t-sandbox-musl; }); devShells = foreachSystem (system: diff --git a/src/main.rs b/src/main.rs index 3e0f22c..0bf1d5c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,38 +1,149 @@ -use std::{ffi::CString, ptr::null}; +use nix::{ + libc::{c_long, EPERM, ORIG_RAX}, + sys::signal::Signal, + unistd::{getpid, getppid}, +}; +use std::{ + ffi::{c_void, CString}, + mem::size_of, +}; +use std::io::Write; + +use clap::*; use libseccomp::*; -use nix::libc::EPERM; + +#[derive(clap::Parser, Debug)] +struct Args { + #[cfg(feature = "tracing-mode")] + #[clap(short, long)] + log_failed_to: Option, + + command: Vec, +} fn main() -> anyhow::Result<()> { env_logger::init(); - log::info!("restrict myself by set_no_new_privs..."); - nix::sys::prctl::set_no_new_privs()?; + let args = Args::parse(); - log::info!("create filter context..."); + log::trace!("args parsed: {args:?}"); - let mut filter = ScmpFilterContext::new_filter(ScmpAction::Errno(EPERM))?; - log::info!("add architecture to filter context..."); - filter.add_arch(ScmpArch::X8664)?; + #[cfg(feature = "tracing-mode")] + let tracing = args.log_failed_to != None; + + let mut default_action = ScmpAction::Errno(EPERM); + + #[cfg(feature = "tracing-mode")] + if let Some(log_fail_to) = args.log_failed_to { + use nix::sys::{ + ptrace::Options, + wait::{waitpid, WaitStatus}, + }; + log::trace!("tracing mode. forking into a tracer..."); + + let fork_result = match unsafe { nix::unistd::fork() } { + Err(err) => panic!("failed to fork a child: {}", err), + Ok(pid) => pid, + }; + + log::trace!("fork result: {fork_result:?}"); + + if let nix::unistd::ForkResult::Parent { child } = fork_result { + // i'm parent, setting up ptrace + + log::trace!("waiting for child to be ready..."); + waitpid(child, None)?; + + let mut output = match std::fs::OpenOptions::new().append(true).write(true).create(true).open(log_fail_to) { + Ok(file) => file, + Err(err) => { + nix::sys::ptrace::kill(child)?; + return Err(err.into()); + } + }; + nix::sys::ptrace::setoptions(child, Options::PTRACE_O_TRACESECCOMP)?; + nix::sys::ptrace::cont(child, None)?; + log::trace!("child is ready"); + + loop { + log::debug!("parent: waitpid..."); + match waitpid(child, None)? { + WaitStatus::Exited(pid, ret) => { + log::info!("child {pid} exited with return code {ret}"); + break; + } + WaitStatus::PtraceEvent(pid, sig,_) => { + let syscall_nr = nix::sys::ptrace::read_user( + pid, + (size_of::() * ORIG_RAX as usize) as *mut c_void, + )? as i32; + let syscall = ScmpSyscall::from(syscall_nr); + let syscall_name = syscall.get_name().unwrap_or(format!("syscall({syscall_nr})")); + log::info!("parent: child {pid} received signal {sig:?} syscall: {syscall_name}({syscall_nr})"); + + writeln!(output, "{} {}", pid.as_raw(), syscall_name); + } + _ => {}, + } + nix::sys::ptrace::cont(child, None); + } + return Ok(()); + } + } + + let command: Vec<_> = args + .command + .iter() + .map(|s| CString::new(s.as_str()).unwrap()) + .collect(); + log::trace!("command: {command:?}"); + let executable = CString::new(args.command[0].clone()).unwrap(); + log::trace!("executable: {executable:?}"); + let env: Vec = std::env::vars() + .into_iter() + .map(|(k, v)| format!("{k}={v}")) + .map(|s| CString::new(s).unwrap()) + .collect(); + + #[cfg(feature = "tracing-mode")] + if tracing { + // i'm child. trace me + log::debug!("child: traceme"); + nix::sys::ptrace::traceme()?; + + let me = getpid(); + log::info!("waiting for parent to be ready..."); + nix::sys::signal::kill(me, nix::sys::signal::Signal::SIGSTOP)?; + log::info!("parent is ready"); + + let parent = getppid(); + default_action = ScmpAction::Trace(parent.as_raw() as u16); + log::info!("set default action to {default_action:?}"); + } + + log::trace!("create filter context..."); + let mut filter = ScmpFilterContext::new_filter(default_action)?; + + filter.add_rule(ScmpAction::Allow, ScmpSyscall::from(nix::libc::SYS_execve as i32))?; x2t_sandbox_rulegen::generate! { - log::info!("accepting {}", syscall_name); + log::trace!("accepting {}({})", syscall_name, syscall_nr); }; - log::info!("load filter into kernel..."); + log::debug!("restrict myself by set_no_new_privs..."); + nix::sys::prctl::set_no_new_privs()?; + + log::info!("loading filter into kernel..."); if let Err(err) = filter.load() { log::error!("failed to load filter into kernel: {err}"); return Err(err.into()); } + log::trace!("loaded"); - let args: Vec<_> = std::env::args().map(|s| CString::new(s).unwrap()).collect(); - let command = std::env::args().next().unwrap(); - let command = CString::new(command).unwrap(); - let env: Vec = Vec::new(); - - log::info!("executing {:?}", args); - if let Err(err) = nix::unistd::execve(&command, args.as_slice(), env.as_slice()) { + log::debug!("executing {:?}", args.command); + if let Err(err) = nix::unistd::execve(&executable, command.as_slice(), env.as_slice()) { panic!("failed to execve for {err}"); } diff --git a/x2t-sandbox-rulegen/Cargo.toml b/x2t-sandbox-rulegen/Cargo.toml index a4ad185..00b3be5 100644 --- a/x2t-sandbox-rulegen/Cargo.toml +++ b/x2t-sandbox-rulegen/Cargo.toml @@ -14,3 +14,5 @@ quote = "1" nix = "0.27.1" regex = "1.10.2" +[features] +no-fail = [] diff --git a/x2t-sandbox-rulegen/src/lib.rs b/x2t-sandbox-rulegen/src/lib.rs index bf25a7f..22102bd 100644 --- a/x2t-sandbox-rulegen/src/lib.rs +++ b/x2t-sandbox-rulegen/src/lib.rs @@ -1,7 +1,7 @@ use std::{collections::HashSet, str::FromStr}; use proc_macro::*; -use quote::{quote, format_ident, TokenStreamExt}; +use quote::{quote, format_ident}; #[proc_macro] pub fn generate(input: TokenStream) -> TokenStream { @@ -15,7 +15,14 @@ pub fn generate(input: TokenStream) -> TokenStream { } else if let Ok(syscalls) = std::fs::read_to_string(&syscall_filepath) { generate_from(input.clone(), syscalls, "\n").into() } else { + #[cfg(not(feature = "no-fail"))] panic!("either specify a X2T_SYSCALLS environment variable with values seperated by colon or write the allowed syscalls line by line into {}", syscall_filepath.to_string_lossy()); + + #[cfg(feature = "no-fail")] + { + eprintln!("x2t syscalls not found. macro is not failing. but you program may fail. turn on tracing-mode to find out what happened"); + TokenStream::new() + } } } @@ -50,7 +57,7 @@ fn generate_from(input: proc_macro::TokenStream, buf: String, sep: &str) -> proc { let syscall_nr = nix::libc::#libc_name; let syscall_name = #syscall_name; - filter.add_rule_conditional(ScmpAction::Allow, syscall_nr as i32, &[])?; + filter.add_rule(ScmpAction::Allow, syscall_nr as i32)?; #hook } } diff --git a/x2t-syscalls.txt b/x2t-syscalls.txt deleted file mode 100644 index 4906012..0000000 --- a/x2t-syscalls.txt +++ /dev/null @@ -1,1045 +0,0 @@ -# this file contains x2t syscalls, two formats can be used for each line: -# - simple syscall name -execve -# - strace line like this -28527 execve("/home/parallels/work/nutstore-editors/extraResources/linux_arm64/x2t", ["/home/parallels/work/nutstore-ed"..., "/home/parallels/.config/yiyang-s"...], 0xfffffe0c0dd0 /* 4 vars */) = 0 -28527 brk(NULL) = 0xaaaac09dc000 -28527 readlinkat(AT_FDCWD, "/proc/self/exe", "/home/parallels/work/nutstore-ed"..., 4096) = 68 -28527 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xffff9155a000 -28527 faccessat(AT_FDCWD, "/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/tls/aarch64/atomics/libgraphics.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 newfstatat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/tls/aarch64/atomics", 0xfffff826dbe0, 0) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/tls/aarch64/libgraphics.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 newfstatat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/tls/aarch64", 0xfffff826dbe0, 0) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/tls/atomics/libgraphics.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 newfstatat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/tls/atomics", 0xfffff826dbe0, 0) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/tls/libgraphics.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 newfstatat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/tls", 0xfffff826dbe0, 0) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/aarch64/atomics/libgraphics.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 newfstatat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/aarch64/atomics", 0xfffff826dbe0, 0) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/aarch64/libgraphics.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 newfstatat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/aarch64", 0xfffff826dbe0, 0) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/atomics/libgraphics.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 newfstatat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/atomics", 0xfffff826dbe0, 0) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libgraphics.so", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\200\313\4\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0775, st_size=7081040, ...}) = 0 -28527 mmap(NULL, 6345096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff90f20000 -28527 mprotect(0xffff914d4000, 61440, PROT_NONE) = 0 -28527 mmap(0xffff914e3000, 233472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x5b3000) = 0xffff914e3000 -28527 mmap(0xffff9151c000, 70024, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff9151c000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libkernel.so", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\0\7\t\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0775, st_size=3307440, ...}) = 0 -28527 mmap(NULL, 2764632, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff90c7d000 -28527 mprotect(0xffff90efc000, 65536, PROT_NONE) = 0 -28527 mmap(0xffff90f0c000, 73728, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x27f000) = 0xffff90f0c000 -28527 mmap(0xffff90f1e000, 8024, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff90f1e000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libUnicodeConverter.so", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\300$\0\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0775, st_size=59144, ...}) = 0 -28527 mmap(NULL, 111768, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff90c61000 -28527 mprotect(0xffff90c6c000, 61440, PROT_NONE) = 0 -28527 mmap(0xffff90c7b000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0xa000) = 0xffff90c7b000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libkernel_network.so", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\0207\0\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0775, st_size=49960, ...}) = 0 -28527 mmap(NULL, 98808, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff90c48000 -28527 mprotect(0xffff90c4f000, 65536, PROT_NONE) = 0 -28527 mmap(0xffff90c5f000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x7000) = 0xffff90c5f000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libFb2File.so", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0`M\1\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0775, st_size=755408, ...}) = 0 -28527 mmap(NULL, 733344, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff90b94000 -28527 mprotect(0xffff90c33000, 61440, PROT_NONE) = 0 -28527 mmap(0xffff90c42000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x9e000) = 0xffff90c42000 -28527 mmap(0xffff90c46000, 4256, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff90c46000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libPdfWriter.so", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\340L\20\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0775, st_size=4343752, ...}) = 0 -28527 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xffff91558000 -28527 mmap(NULL, 3538000, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff90834000 -28527 mprotect(0xffff90b4f000, 65536, PROT_NONE) = 0 -28527 mmap(0xffff90b5f000, 196608, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x31b000) = 0xffff90b5f000 -28527 mmap(0xffff90b8f000, 19536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff90b8f000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libPdfReader.so", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\300\n\6\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0775, st_size=3847424, ...}) = 0 -28527 mmap(NULL, 3507272, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff904db000 -28527 mprotect(0xffff907d7000, 61440, PROT_NONE) = 0 -28527 mmap(0xffff907e6000, 311296, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x2fb000) = 0xffff907e6000 -28527 mmap(0xffff90832000, 5192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff90832000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libHtmlFile2.so", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\240I\1\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0775, st_size=1216112, ...}) = 0 -28527 mmap(NULL, 1160864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff903bf000 -28527 mprotect(0xffff904c5000, 65536, PROT_NONE) = 0 -28527 mmap(0xffff904d5000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x106000) = 0xffff904d5000 -28527 mmap(0xffff904d9000, 5792, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff904d9000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libEpubFile.so", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\240\270\0\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0775, st_size=237080, ...}) = 0 -28527 mmap(NULL, 251680, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff90381000 -28527 mprotect(0xffff903ae000, 61440, PROT_NONE) = 0 -28527 mmap(0xffff903bd000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x2c000) = 0xffff903bd000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libXpsFile.so", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0 \352\0\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0775, st_size=378056, ...}) = 0 -28527 mmap(NULL, 367064, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff90327000 -28527 mprotect(0xffff9036f000, 65536, PROT_NONE) = 0 -28527 mmap(0xffff9037f000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x48000) = 0xffff9037f000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libDjVuFile.so", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0PQ\1\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0775, st_size=1519128, ...}) = 0 -28527 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xffff91556000 -28527 mmap(NULL, 1365648, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff901d9000 -28527 mprotect(0xffff9030c000, 65536, PROT_NONE) = 0 -28527 mmap(0xffff9031c000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x133000) = 0xffff9031c000 -28527 mmap(0xffff90322000, 18064, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff90322000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libHtmlRenderer.so", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\360\336\0\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0775, st_size=279872, ...}) = 0 -28527 mmap(NULL, 289344, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff90192000 -28527 mprotect(0xffff901c7000, 61440, PROT_NONE) = 0 -28527 mmap(0xffff901d6000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x34000) = 0xffff901d6000 -28527 mmap(0xffff901d8000, 2624, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff901d8000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libdoctrenderer.so", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\200\333R\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0775, st_size=29107528, ...}) = 0 -28527 mmap(NULL, 22454616, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff8ec27000 -28527 mprotect(0xffff900d0000, 65536, PROT_NONE) = 0 -28527 mmap(0xffff900e0000, 610304, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x14a9000) = 0xffff900e0000 -28527 mmap(0xffff90175000, 115032, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff90175000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libDocxRenderer.so", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\260\320\0\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0775, st_size=285816, ...}) = 0 -28527 mmap(NULL, 297472, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff8ebde000 -28527 mprotect(0xffff8ec14000, 65536, PROT_NONE) = 0 -28527 mmap(0xffff8ec24000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x36000) = 0xffff8ec24000 -28527 mmap(0xffff8ec26000, 2560, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff8ec26000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system/tls/aarch64/atomics/libpthread.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 newfstatat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system/tls/aarch64/atomics", 0xfffff826da20, 0) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system/tls/aarch64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 newfstatat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system/tls/aarch64", 0xfffff826da20, 0) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system/tls/atomics/libpthread.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 newfstatat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system/tls/atomics", 0xfffff826da20, 0) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system/tls/libpthread.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 newfstatat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system/tls", 0xfffff826da20, 0) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system/aarch64/atomics/libpthread.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 newfstatat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system/aarch64/atomics", 0xfffff826da20, 0) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system/aarch64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 newfstatat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system/aarch64", 0xfffff826da20, 0) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system/atomics/libpthread.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 newfstatat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system/atomics", 0xfffff826da20, 0) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system/libpthread.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 newfstatat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/system", 0xfffff826da20, 0) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 11 -28527 fstat(11, {st_mode=S_IFREG|0644, st_size=87446, ...}) = 0 -28527 mmap(NULL, 87446, PROT_READ, MAP_PRIVATE, 11, 0) = 0xffff8ebc8000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/lib/aarch64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0Ha\0\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0755, st_size=164304, ...}) = 0 -28527 mmap(NULL, 197624, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff8eb97000 -28527 mprotect(0xffff8ebb3000, 61440, PROT_NONE) = 0 -28527 mmap(0xffff8ebc2000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x1b000) = 0xffff8ebc2000 -28527 mmap(0xffff8ebc4000, 13304, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff8ebc4000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/lib/aarch64-linux-gnu/libm.so.6", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\360\272\0\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0644, st_size=633832, ...}) = 0 -28527 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xffff91554000 -28527 mmap(NULL, 696440, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff8eaec000 -28527 mprotect(0xffff8eb85000, 65536, PROT_NONE) = 0 -28527 mmap(0xffff8eb95000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x99000) = 0xffff8eb95000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/lib/aarch64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0`\17\2\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0755, st_size=1450832, ...}) = 0 -28527 mmap(NULL, 1519552, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff8e979000 -28527 mprotect(0xffff8ead4000, 61440, PROT_NONE) = 0 -28527 mmap(0xffff8eae3000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x15a000) = 0xffff8eae3000 -28527 mmap(0xffff8eae9000, 12224, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff8eae9000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/lib/aarch64-linux-gnu/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\340\247\t\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0644, st_size=1907992, ...}) = 0 -28527 mmap(NULL, 1984176, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff8e794000 -28527 mprotect(0xffff8e959000, 61440, PROT_NONE) = 0 -28527 mmap(0xffff8e968000, 57344, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x1c4000) = 0xffff8e968000 -28527 mmap(0xffff8e976000, 9904, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff8e976000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/lib/aarch64-linux-gnu/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\320)\0\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0644, st_size=80200, ...}) = 0 -28527 mmap(NULL, 144472, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff8e770000 -28527 mprotect(0xffff8e783000, 61440, PROT_NONE) = 0 -28527 mmap(0xffff8e792000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x12000) = 0xffff8e792000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libicuuc.so.58", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0@\344\5\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0755, st_size=2072624, ...}) = 0 -28527 mmap(NULL, 1830016, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff8e5b1000 -28527 mprotect(0xffff8e74c000, 65536, PROT_NONE) = 0 -28527 mmap(0xffff8e75c000, 77824, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x19b000) = 0xffff8e75c000 -28527 mmap(0xffff8e76f000, 3200, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff8e76f000 -28527 close(11) = 0 -28527 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xffff91552000 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libicudata.so.58", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0.\2\0\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0755, st_size=26215704, ...}) = 0 -28527 mmap(NULL, 26279936, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff8cca1000 -28527 mprotect(0xffff8e5a1000, 61440, PROT_NONE) = 0 -28527 mmap(0xffff8e5b0000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x18ff000) = 0xffff8e5b0000 -28527 close(11) = 0 -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/home/parallels/work/nutstore-editors/extraResources/linux_arm64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) -28527 openat(AT_FDCWD, "/lib/aarch64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 11 -28527 read(11, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0P\17\0\0\0\0\0\0"..., 832) = 832 -28527 fstat(11, {st_mode=S_IFREG|0644, st_size=14560, ...}) = 0 -28527 mmap(NULL, 78080, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 11, 0) = 0xffff8cc8d000 -28527 mprotect(0xffff8cc90000, 61440, PROT_NONE) = 0 -28527 mmap(0xffff8cc9f000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 11, 0x2000) = 0xffff8cc9f000 -28527 close(11) = 0 -28527 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xffff91550000 -28527 mprotect(0xffff8eae3000, 16384, PROT_READ) = 0 -28527 mprotect(0xffff8cc9f000, 4096, PROT_READ) = 0 -28527 mprotect(0xffff8e5b0000, 4096, PROT_READ) = 0 -28527 mprotect(0xffff8ebc2000, 4096, PROT_READ) = 0 -28527 mprotect(0xffff8eb95000, 4096, PROT_READ) = 0 -28527 mprotect(0xffff8e792000, 4096, PROT_READ) = 0 -28527 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xffff8cc8b000 -28527 mprotect(0xffff8e968000, 45056, PROT_READ) = 0 -28527 mprotect(0xffff8e75c000, 73728, PROT_READ) = 0 -28527 mprotect(0xffff90f0c000, 61440, PROT_READ) = 0 -28527 mprotect(0xffff90c7b000, 4096, PROT_READ) = 0 -28527 mprotect(0xffff914e3000, 159744, PROT_READ) = 0 -28527 mprotect(0xffff8ec24000, 4096, PROT_READ) = 0 -28527 mprotect(0xffff90c5f000, 4096, PROT_READ) = 0 -28527 mprotect(0xffff900e0000, 434176, PROT_READ) = 0 -28527 mprotect(0xffff901d6000, 4096, PROT_READ) = 0 -28527 mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xffff8cc88000 -28527 mprotect(0xffff90b5f000, 184320, PROT_READ) = 0 -28527 mprotect(0xffff9031c000, 16384, PROT_READ) = 0 -28527 mprotect(0xffff9037f000, 4096, PROT_READ) = 0 -28527 mprotect(0xffff904d5000, 12288, PROT_READ) = 0 -28527 mprotect(0xffff903bd000, 4096, PROT_READ) = 0 -28527 mprotect(0xffff907e6000, 106496, PROT_READ) = 0 -28527 mprotect(0xffff90c42000, 12288, PROT_READ) = 0 -28527 mprotect(0xaaaaae0b9000, 2633728, PROT_READ) = 0 -28527 mprotect(0xffff9155f000, 4096, PROT_READ) = 0 -28527 munmap(0xffff8ebc8000, 87446) = 0 -28527 set_tid_address(0xffff91550d60) = 28527 -28527 set_robust_list(0xffff91550d70, 24) = 0 -28527 rt_sigaction(SIGRTMIN, {sa_handler=0xffff8eb9cbd0, sa_mask=[], sa_flags=SA_SIGINFO}, NULL, 8) = 0 -28527 rt_sigaction(SIGRT_1, {sa_handler=0xffff8eb9cc90, sa_mask=[], sa_flags=SA_RESTART|SA_SIGINFO}, NULL, 8) = 0 -28527 rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0 -28527 prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0 -28527 brk(NULL) = 0xaaaac09dc000 -28527 brk(0xaaaac09fd000) = 0xaaaac09fd000 -28527 brk(0xaaaac0a20000) = 0xaaaac0a20000 -28527 futex(0xffff90f1e260, FUTEX_WAKE_PRIVATE, 2147483647) = 0 -28527 futex(0xffff90f1e264, FUTEX_WAKE_PRIVATE, 2147483647) = 0 -28527 brk(0xaaaac0a41000) = 0xaaaac0a41000 -28527 brk(0xaaaac0a62000) = 0xaaaac0a62000 -28527 brk(0xaaaac0a83000) = 0xaaaac0a83000 -28527 brk(0xaaaac0aa4000) = 0xaaaac0aa4000 -28527 brk(0xaaaac0ac5000) = 0xaaaac0ac5000 -28527 brk(0xaaaac0ae6000) = 0xaaaac0ae6000 -28527 brk(0xaaaac0b07000) = 0xaaaac0b07000 -28527 brk(0xaaaac0b28000) = 0xaaaac0b28000 -28527 brk(0xaaaac0b49000) = 0xaaaac0b49000 -28527 brk(0xaaaac0b6a000) = 0xaaaac0b6a000 -28527 brk(0xaaaac0b8b000) = 0xaaaac0b8b000 -28527 brk(0xaaaac0bac000) = 0xaaaac0bac000 -28527 brk(0xaaaac0bcd000) = 0xaaaac0bcd000 -28527 brk(0xaaaac0bee000) = 0xaaaac0bee000 -28527 brk(0xaaaac0c0f000) = 0xaaaac0c0f000 -28527 brk(0xaaaac0c30000) = 0xaaaac0c30000 -28527 brk(0xaaaac0c51000) = 0xaaaac0c51000 -28527 brk(0xaaaac0c72000) = 0xaaaac0c72000 -28527 brk(0xaaaac0c93000) = 0xaaaac0c93000 -28527 brk(0xaaaac0cb5000) = 0xaaaac0cb5000 -28527 brk(0xaaaac0cd6000) = 0xaaaac0cd6000 -28527 brk(0xaaaac0cf7000) = 0xaaaac0cf7000 -28527 brk(0xaaaac0d18000) = 0xaaaac0d18000 -28527 brk(0xaaaac0d39000) = 0xaaaac0d39000 -28527 brk(0xaaaac0d5a000) = 0xaaaac0d5a000 -28527 brk(0xaaaac0d7b000) = 0xaaaac0d7b000 -28527 brk(0xaaaac0d9c000) = 0xaaaac0d9c000 -28527 brk(0xaaaac0dbd000) = 0xaaaac0dbd000 -28527 brk(0xaaaac0dde000) = 0xaaaac0dde000 -28527 brk(0xaaaac0dff000) = 0xaaaac0dff000 -28527 brk(0xaaaac0e20000) = 0xaaaac0e20000 -28527 brk(0xaaaac0e42000) = 0xaaaac0e42000 -28527 brk(0xaaaac0e63000) = 0xaaaac0e63000 -28527 brk(0xaaaac0e84000) = 0xaaaac0e84000 -28527 brk(0xaaaac0ea5000) = 0xaaaac0ea5000 -28527 brk(0xaaaac0ec8000) = 0xaaaac0ec8000 -28527 brk(0xaaaac0ee9000) = 0xaaaac0ee9000 -28527 brk(0xaaaac0f0a000) = 0xaaaac0f0a000 -28527 brk(0xaaaac0f2b000) = 0xaaaac0f2b000 -28527 brk(0xaaaac0f4c000) = 0xaaaac0f4c000 -28527 brk(0xaaaac0f6d000) = 0xaaaac0f6d000 -28527 prlimit64(0, RLIMIT_DATA, {rlim_cur=4194304*1024, rlim_max=4194304*1024}, NULL) = 0 -28527 newfstatat(AT_FDCWD, "/home/parallels/.config/yiyang-suite/onlyoffice/recovery/DE_B5E1/params_from.xml", {st_mode=S_IFREG|0664, st_size=461, ...}, 0) = 0 -28527 openat(AT_FDCWD, "/home/parallels/.config/yiyang-suite/onlyoffice/recovery/DE_B5E1/params_from.xml", O_RDONLY) = 11 -28527 fstat(11, {st_mode=S_IFREG|0664, st_size=461, ...}) = 0 -28527 fstat(11, {st_mode=S_IFREG|0664, st_size=461, ...}) = 0 -28527 lseek(11, 0, SEEK_SET) = 0 -28527 read(11, ""..., 4096) = 4096 -28527 write(14, "\"/><"..., 4096) = 4096 -28527 write(14, "l=\"1\"/>"..., 4096) = 4096 -28527 write(14, "StylePr>"..., 4096) = 4096 -28527 write(14, "Ansi=\"Arial\"/>