dbz2.c
来自「在x86平台上运行不可信任代码的sandbox。」· C语言 代码 · 共 81 行
C
81 行
#include <stdio.h>#include <stdlib.h>#include <stdarg.h>#include <unistd.h>#include <errno.h>#include "bzlib.h"#define BUFSIZE (64*1024)static bz_stream s;static char inbuf[BUFSIZE];static char outbuf[BUFSIZE];void fatal(const char *fmt, ...){ va_list ap; va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); fputc('\n', stderr); exit(2);}void bz_internal_error (int errcode){ fatal("Internal bzip2 error: %d", errcode);}int main(int argc, char **argv){ while (1) { int rc; if ((rc = BZ2_bzDecompressInit(&s, 0, 0)) != BZ_OK) fatal("BZ2_bzDecompressInit: %d", rc); // Decompress the input file int done = 0; do { // Read a block of input data ssize_t inlen = read(STDIN_FILENO, inbuf, BUFSIZE); if (inlen < 0) fatal("read error: %d", errno); if (inlen == 0) fatal("compressed data appears to be truncated"); // Decompress this input block s.next_in = inbuf; s.avail_in = inlen; do { s.next_out = outbuf; s.avail_out = BUFSIZE; rc = BZ2_bzDecompress(&s); if (rc == BZ_STREAM_END) done = 1; else if (rc != BZ_OK) fatal("BZ2_bzDecompress: %d", rc); // Write any output the decompressor produced ssize_t outlen = write(STDOUT_FILENO, outbuf, BUFSIZE - s.avail_out); if (outlen < 0) fatal("write error: %d", errno); // Continue decompressing the input block until done } while (s.avail_in > 0 && !done); } while (!done); if ((rc = BZ2_bzDecompressEnd(&s)) != BZ_OK) fatal("BZ2_bzDecompressEnd: %d", rc); // Indicate to parent that we're done //asm volatile("syscall" : : "a" (VXAPC_DONE) : "ecx"); return 0; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?