이번에 사용하는건 간단한 키보드 입력 인식 및 처리 방법이다.

 Hexa Code Editor를 TUI 형태로 처리 하기 위해서 getch()을 이용했다.[각주:1]


 윗 방법은 conio.h로 콘솔 입출력에서 수정하는 방법이다.

 Windows.h에서는 또 다른 방법으로 처리하는 방법이 있다.


 이것의 예로는 GetKeyboardState 혹은 GetAsyncKeyState을 이용해서 처리한다.[각주:2]

 이 방법은 가상 키 처리이기 때문에, 콘솔 입출력이 아닌, Windows에서 제공하는 방법을 사용하면 된다.


 콘솔로 처리하고 싶어서, 일단, 콘솔 입출력으로 구현했다.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <stdio.h>
#include <stdlib.h>
 
#include <windows.h>
#include <conio.h>
 
int main()
{
    COORD coord;
 
    char keys = 0;
 
    int a = 1;
 
    short x=0,y=0;
 
    while(a){
        keys=getch();
        switch(keys){
        case 'a':
        case 'A':
            if(x>0) x=x-1;
            break;
        case 'd':
        case 'D' :
            if(x<10) x=x+1;
            break;
        case 's':
        case 'S':
            if(y<10) y=y+1;
            break;
        case 'w':
        case 'W':
            if(y>0) y=y-1;
            break;
        case 'c':
        case 'C':
            a=0;
            break;
        default:
            break;
        }
        coord.X=x;
        coord.Y=y;
 
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
 
        printf("W");
    }
 
    coord.X = 0;
    coord.Y = 11;
 
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
 
    printf("Hello world!\n");
 
    return 0;
}
 
 
cs


 다른 방법으로 앞서 설명한, 가상 키를 입력 받아서 처리하는 방법을 사용해도 된다.


 윗 방법에다가 Hexa Code Editor의 출력 부분을 설정하면, 완성하면, TUI형태의 편집기가 완성된다.

Posted by JunkMam
,

 Windows에서 사용되는 DOS 커서 설정하는 것은 꼭 Hexa Code Editor을 만들기 위해서 사용되는 방법이 아니다.


 단, 이걸 이용해서 DOS의 커서를 설정해야지만이 TUI을 제작할 수 있기 때문에 기록하는 것이다.


 DOS의 커서를 설정하는데 사용되는 함수는 setConsoleCursorPosition[각주:1]이라는 함수이다.


 이 함수를 이용하면, 만들어지고, 어셈블리어를 설정하면, 또다른 방법으로 TUI을 설정할 수 있다.(이것은 나중에 찾아봐야겠다.)


 예제)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
 
#include <windows.h>
 
int main()
{
    COORD coord;
 
    coord.X = 10;
    coord.Y = 20;
 
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
 
    printf("Hello world!\n");
    
    return 0;
}
 
 
cs


 여기서 COORD[각주:2]라는 구조체가 필요하게 된다.

 여기서 coord라는 녀석은 콘솔의 X, Y의 값을 저장하는 구조체가 있다.

 GetStdHandle()[각주:3]은 콘솔의 핸들러를 받아서 처리하는 것이다.

 STD_OUTPUT_HANDLE이라는 것은 기본적으로 설정되어 있는 핸들이다.


 여기 핸들의 정보는 각주를 참조하는게 좋을 것으로 생각한다.

Posted by JunkMam
,

 Hexa Code Editor 필자는 바이너리 에디터라고 말하는 에디터는 파일의 내용물을 이진 파일 입출력을 이용해서 불러와서 내용물을 보는 편집기를 말한다.


 컴퓨터의 모든 프로그램은 바이너리 데이터들을 책처럼 나열해 놓은 형태이다.

 

 예을 들어서 EXE 파일이나, JPEG, PNG 등의 모든 파일들은 바이너리 입출력으로 처리되며, 이 파일의 형태에 맞춰서 읽어 들인다.

 EXE. 즉, 실행 파일조차도 COFF에 맞춰서 사전처럼 읽어 들이고, 쓰게 되어있다.


 이걸 이용해서 바이러스파일이나, 기타 파일을 분석하거나 수정을 가할 수 있는 방식이라고 생각하면 된다.

 쉽게 분석할려면, 이 Hexa Code Editor을 수정해서 CPU에서 읽어들이는 형태(어셈블리어)를 자동으로 변환 시켜주는 틀을 만들어야되지만, Hexa Code Editor는 그 뿐만 아니라, 다른 파일들도 분석할 수 있기 때문에 다양하게 사용될 수 있다.


 옛날에는 게임의 저장 파일을 수정해서 에디팅을 하기 위해서 사용되었다.


 그럼, 이렇게 다양하게 사용할 수 있는 툴을 만들어 보고자 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
#include <stdlib.h>
 
#include <windows.h>
 
#define BUFFER_SIZE 16
 
int main()
{
    FILE *fp = NULL;
 
    char buff[BUFFER_SIZE] = {0};
    long offset = 0;
    int read = 0;
    int num = 0;
 
    fp = fopen("./a.exe","rb");
 
    if(fp == NULL) return -1;
 
    while((read = fread(&buff,sizeof(char),BUFFER_SIZE,fp))!=0){
        printf("%.10X : ",offset);
 
        for(num = 0; num < read; num++){
            printf("%.2X ",buff[num]&0xFF);
        }
        offset+=read;
 
        printf("\n");
    }
 
 
    fclose(fp);
 
    return 0;
}
 
 
cs


 이렇게 하면, a라는 파일의 내용물을 출력하게 된다.

 이 출력된 데이터는 Hexa로 출력되기 때문에, Hexa Code Editor 혹은 Hexa Edit/ Hex Edit라고 한다.


 여기서 중요한건, 바이너리(이진)으로 입출력해야된다.

 그렇게 하지 않으면, 입출력을 문자로 처리하기 때문에, 영어권 외의 곳에선 1Byte 이상의 데이터를 읽어들여서 출력하게 된다.(줄 바꿈또한 1-2Byte을 사용하게 된다.)

 이렇게 되면, 문제가 있기 때문에 fopen([파일명],"rb");을 이용해야된다.

'연습' 카테고리의 다른 글

Hexa Code Editor 만들기 -키보드 입력 인식-  (0) 2015.11.24
Hexa Code Editor 만들기 -Windows에서 DOS 커서 이동.-  (0) 2015.11.23
CodeBlocks 설치 및 설정하기.  (0) 2015.11.17
XWRT 문제점...  (0) 2015.11.15
GAR --Help  (0) 2015.11.11
Posted by JunkMam
,

 Code::Blocks란, C언어 및 포트란 등을 지원하는 오픈 소스의 크로스 플렛폼 IDE(통합 개발 환경)이다.(Free Software이다.)



 


  ↑ Code::Blocks을 다운 받는 곳


 Code::Blocks는 크로스 플렛폼이기 떄문에, 리눅스, 윈도우등에 사용이 가능하다.

 그리고 wxWidget이라는 클로스 플렛폼 GUI 라이브러리가 있어서 리눅스, 윈도우등의 소스를 한번에 제작이 가능하다.(단, 이것 또한 가상머신과 유사하게 돌아가는 방식이기 때문에, 유포할 경우, DLL 파일을 같이 넣어서 유포해줘야된다.)


 IDE(통합 개발 환경) 이기 때문에, 컴파일 장치로 보는게 맞지 않다.

 그래서, 컴파일러를 깔아야된다.


 Code::Blocks의 본 사이트에선 Downloads에서 MinGW랑 같이 설치 할 수 있게 되어 있다.


 그냥, 설치할 사람은 그걸 이용해서 설치하길 바란다.


 그게 아닌 사람들은, MinGW을 다운 받는다.


 MinGW 64Bit 다운받는 곳


 다운 받은 후에 설치를 한다.


 설치는 따라 맞춰서 설치하면 된다.


 


 맨 처음 열었을때, 이런 창이 뜻 것이다.

 여기서Settings -> Compiler을 클릭한다.



 이런 창이 뜨게 되는데, 이 창에서 Tollchain executables이라는 탭을 클릭한다.



 클릭하면, 이렇게 창이 뜨게되고, Compiler's installation directory 설정에서 파일을 찾게한다.

 이렇게하면, 파일을 설정되는데, MinGW의 bin파일이 기본적으로 설정되어 있고, 거기서 컴파일인 gcc와 g++, gfotran등 기본적인 프로그래밍 언어 컴파일러가 존재하며, 그 외도 as(GNU as)와 ar등의 툴까지 같이 있다.


 이것까지 제대로 설정이 되어 있으면, Code::Blocks의 설정이 끝난다.

'연습' 카테고리의 다른 글

Hexa Code Editor 만들기 -Windows에서 DOS 커서 이동.-  (0) 2015.11.23
Hexa Code Editor 만들기 -이진 파일 출력.-  (0) 2015.11.22
XWRT 문제점...  (0) 2015.11.15
GAR --Help  (0) 2015.11.11
GCC --help  (0) 2015.11.10
Posted by JunkMam
,

XWRT 문제점...

연습 2015. 11. 15. 09:30
 분명, XWRT로 압축해서 되돌아올때, 문제 없었는데, 다시 해보니깐, 문제가 일어나는 파일 몇개들이 보인다.

 XWRT는 문자에 대해서 맞춰진 압축 방식이라서 그런지, 바이너리파일을 돌렸을때, 복원이 안되는 문제가 생기는 것 같다.


 정확하게는 모르겠지만, 현재, 그렇게 해서 날아간 파일이 80개 가량이다.

 이미 원본을 날렸기 때문에, 복원은 불가...

 버릴 파일이지만, 추억때문에 남길려고 한 게임 파일들이라서, 그냥 포기하고 나은 방법을 찾을려고한다.

 어짜피 게임 출시 년도가 94년~04년들이기 때문에, 별 의미를 가질 필요는 없을 것 같다.


 요즘 게임을 하지 않고, 게임이야 프로그래밍을 배웠기 떄문에, 시간나면, 만들면 되는 것이다.



 XWRT는 XML에 맞춰져서 만들어진 압축 방법이라고 적혀 있다.

 즉, 바이너리 방식보단, 글자방식의 압축에 안전하게 처리할 수 있다라고 보는게 맞을 것 같다.

 바이너리를 글자방식으로 바꾸는 BASE64로 테스트해보는건 어떨까 생각중이다.



 바이너리에서 문제가 일어나는 경우가 있긴 하지만, 바이너리로 Compress Decompress을 둘다 문제가 없었다.


 이유를 알 수 없지만, BASE64로 해도 오히려 용량이 증가하는 문제가 있으니. 그냥, 바이너리로 압축하여 문제 없는지 확인하고 있는게 좋을 것 같다.

Posted by JunkMam
,

GAR --Help

연습 2015. 11. 11. 16:09

Usage: C:\Program Files\CodeBlocks\MinGW\bin\ar.exe [emulation options] [-]{dmpqrstx}[abcDfilMNoPsSTuvV] [member-name] [count] archive-file file...

       C:\Program Files\CodeBlocks\MinGW\bin\ar.exe -M [<mri-script]

 commands:

  d            - delete file(s) from the archive

  m[ab]        - move file(s) in the archive

  p            - print file(s) found in the archive

  q[f]         - quick append file(s) to the archive

  r[ab][f][u]  - replace existing or insert new file(s) into the archive

  s            - act as ranlib

  t            - display contents of archive

  x[o]         - extract file(s) from the archive

 command specific modifiers:

  [a]          - put file(s) after [member-name]

  [b]          - put file(s) before [member-name] (same as [i])

  [D]          - use zero for timestamps and uids/gids

  [U]          - use actual timestamps and uids/gids (default)

  [N]          - use instance [count] of name

  [f]          - truncate inserted file names

  [P]          - use full path names when matching

  [o]          - preserve original dates

  [u]          - only replace files that are newer than current archive contents

 generic modifiers:

  [c]          - do not warn if the library had to be created

  [s]          - create an archive index (cf. ranlib)

  [S]          - do not build a symbol table

  [T]          - make a thin archive

  [v]          - be verbose

  [V]          - display the version number

  @<file>      - read options from <file>

  --target=BFDNAME - specify the target object format as BFDNAME

 emulation options: 

  No emulation specific options

C:\Program Files\CodeBlocks\MinGW\bin\ar.exe: supported targets: pe-x86-64 pei-x86-64 elf64-x86-64 elf64-l1om elf64-k1om pe-i386 pei-i386 elf32-i386 elf64-little elf64-big elf32-little elf32-big srec symbolsrec verilog tekhex binary ihex

Report bugs to <mingw-w64-public@lists.sourceforge.net>



'연습' 카테고리의 다른 글

CodeBlocks 설치 및 설정하기.  (0) 2015.11.17
XWRT 문제점...  (0) 2015.11.15
GCC --help  (0) 2015.11.10
압축률 약 18%에, 메모리 량도 1.5G이내인 조금 좋은 압축 프로그램 -xwrt-  (0) 2015.11.09
GAS --help  (0) 2015.11.07
Posted by JunkMam
,

GCC --help

연습 2015. 11. 10. 22:52

Usage: gcc.exe [options] file...

Options:

  -pass-exit-codes         Exit with highest error code from a phase

  --help                   Display this information

  --target-help            Display target specific command line options

  --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...]

                           Display specific types of command line options

  (Use '-v --help' to display command line options of sub-processes)

  --version                Display compiler version information

  -dumpspecs               Display all of the built in spec strings

  -dumpversion             Display the version of the compiler

  -dumpmachine             Display the compiler's target processor

  -print-search-dirs       Display the directories in the compiler's search path

  -print-libgcc-file-name  Display the name of the compiler's companion library

  -print-file-name=<lib>   Display the full path to library <lib>

  -print-prog-name=<prog>  Display the full path to compiler component <prog>

  -print-multiarch         Display the target's normalized GNU triplet, used as

                           a component in the library path

  -print-multi-directory   Display the root directory for versions of libgcc

  -print-multi-lib         Display the mapping between command line options and

                           multiple library search directories

  -print-multi-os-directory Display the relative path to OS libraries

  -print-sysroot           Display the target libraries directory

  -print-sysroot-headers-suffix Display the sysroot suffix used to find headers

  -Wa,<options>            Pass comma-separated <options> on to the assembler

  -Wp,<options>            Pass comma-separated <options> on to the preprocessor

  -Wl,<options>            Pass comma-separated <options> on to the linker

  -Xassembler <arg>        Pass <arg> on to the assembler

  -Xpreprocessor <arg>     Pass <arg> on to the preprocessor

  -Xlinker <arg>           Pass <arg> on to the linker

  -save-temps              Do not delete intermediate files

  -save-temps=<arg>        Do not delete intermediate files

  -no-canonical-prefixes   Do not canonicalize paths when building relative

                           prefixes to other gcc components

  -pipe                    Use pipes rather than intermediate files

  -time                    Time the execution of each subprocess

  -specs=<file>            Override built-in specs with the contents of <file>

  -std=<standard>          Assume that the input sources are for <standard>

  --sysroot=<directory>    Use <directory> as the root directory for headers

                           and libraries

  -B <directory>           Add <directory> to the compiler's search paths

  -v                       Display the programs invoked by the compiler

  -###                     Like -v but options quoted and commands not executed

  -E                       Preprocess only; do not compile, assemble or link

  -S                       Compile only; do not assemble or link

  -c                       Compile and assemble, but do not link

  -o <file>                Place the output into <file>

  -pie                     Create a position independent executable

  -shared                  Create a shared library

  -x <language>            Specify the language of the following input files

                           Permissible languages include: c c++ assembler none

                           'none' means revert to the default behavior of

                           guessing the language based on the file's extension


Options starting with -g, -f, -m, -O, -W, or --param are automatically

 passed on to the various sub-processes invoked by gcc.exe.  In order to pass

 other options on to these processes the -W<letter> options must be used.


For bug reporting instructions, please see:

<mingw-w64-public@lists.sourceforge.net>.



'연습' 카테고리의 다른 글

XWRT 문제점...  (0) 2015.11.15
GAR --Help  (0) 2015.11.11
압축률 약 18%에, 메모리 량도 1.5G이내인 조금 좋은 압축 프로그램 -xwrt-  (0) 2015.11.09
GAS --help  (0) 2015.11.07
TANGELO - PAQ8 / FP8 에서 파생된 압축 파일 -  (0) 2015.11.05
Posted by JunkMam
,

 Hutter 상의 결과물을 본 것 중에 xwrt라는 프로그램을 찾아 봤다.[각주:1]


 압축률이 약 18%가량이고, 메모리 사용량도 약 1.5G이다.


 LPAQ6을 변경한 프로그램이다.


 여기서 LPAQ란, Lite PAQ의 약칭이다.

 Lite PAQ는, 가벼운 PAQ 모델을 만들고, 그 모델로 압축하는 프로그램이다.

 lpaq9m또한 Lite PAQ에 속하는 것이다.

 현재, Hutter 상을 받은 제품이 drt|lpaq9m이며, 이것은 압축률은 약 10위 안에 든다.

 거기에 처리속도, 메모리에서 효율적이며, 압축률 또한 높아서 받은 것 같다.


 Tangelo는 문제가 2G이상을 처리할 수 없다.(이건 drt|lpaq9m에서도 동일하다고 적혀 있다.)


 mcm은 2G이상은 처리할 수 있지만, 문제는 메모리 사용량에 문제이다.


 xwrt는 2G이상을 처리 할 수 있으며, Lite PAQ에 변형체인 만큼 메모리 량도 2G이상을 넘치지 않는다.(MCM은 Hutter 상의 결과물 만큼 볼려면, 5.6G이상의 메모리를 사용한다.)


 xwrt와 tangelo의 차이는

 xwrt는 paq에서도 lpaq에서 파생된 압축이고, tangelo는 paq에서 fpaq에서 파생된것이다.(fpaq의 약자로 fp라고 한다.)


 최대 값으로 처리하는 방법으로

 -l14 -b255 -m96 -s -e4000 -f200 대상 파일명.


 이렇게 처리한다.

 -l14는 level 14라는 뜻이고,

 -b255는 255의 수를 뜻하고,

 -e4000는 단어가 40000단어 라는 뜻이라고 한다.

 자세한건 도움말을 참조 할것.

  1. xwrt(2015-11-05) [본문으로]

'연습' 카테고리의 다른 글

GAR --Help  (0) 2015.11.11
GCC --help  (0) 2015.11.10
GAS --help  (0) 2015.11.07
TANGELO - PAQ8 / FP8 에서 파생된 압축 파일 -  (0) 2015.11.05
MCM -압축과 속도가 빠른 압축 툴-  (0) 2015.11.03
Posted by JunkMam
,

GAS --help

연습 2015. 11. 7. 22:41

MinGW을 기준으로 설정된 사용 설명서 원본이다.


Usage: as [option...] [asmfile...]

Options:

  -a[sub-option...]  turn on listings

                       Sub-options [default hls]:

                       c      omit false conditionals

                       d      omit debugging directives

                       g      include general info

                       h      include high-level source

                       l      include assembly

                       m      include macro expansions

                       n      omit forms processing

                       s      include symbols

                       =FILE  list to FILE (must be last sub-option)

  --alternate             initially turn on alternate macro syntax

  -D                      produce assembler debugging messages

  --debug-prefix-map OLD=NEW

                          map OLD to NEW in debug information

  --defsym SYM=VAL        define symbol SYM to given value

  -f                      skip whitespace and comment preprocessing

  -g --gen-debug          generate debugging information

  --gstabs                generate STABS debugging information

  --gstabs+               generate STABS debug info with GNU extensions

  --gdwarf-2              generate DWARF2 debugging information

  --hash-size=<value>     set the hash table size close to <value>

  --help                  show this message and exit

  --target-help           show target specific options

  -I DIR                  add DIR to search list for .include directives

  -J                      don't warn about signed overflow

  -K                      warn when differences altered for long displacements

  -L,--keep-locals        keep local symbols (e.g. starting with `L')

  -M,--mri                assemble in MRI compatibility mode

  --MD FILE               write dependency information in FILE (default none)

  -nocpp                  ignored

  -o OBJFILE              name the object-file output OBJFILE (default a.out)

  -R                      fold data section into text section

  --reduce-memory-overheads 

                          prefer smaller memory use at the cost of longer

                          assembly times

  --statistics            print various measured statistics from execution

  --strip-local-absolute  strip local absolute symbols

  --traditional-format    Use same format as native assembler when possible

  --version               print assembler version number and exit

  -W  --no-warn           suppress warnings

  --warn                  don't suppress warnings

  --fatal-warnings        treat warnings as errors

  -w                      ignored

  -X                      ignored

  -Z                      generate object file even after errors

  --listing-lhs-width     set the width in words of the output data column of

                          the listing

  --listing-lhs-width2    set the width in words of the continuation lines

                          of the output data column; ignored if smaller than

                          the width of the first line

  --listing-rhs-width     set the max width in characters of the lines from

                          the source file

  --listing-cont-lines    set the maximum number of continuation lines used

                          for the output data column of the listing

  @FILE                   read options from FILE

  -n                      Do not optimize code alignment

  -q                      quieten some warnings

  --32/--64/--x32         generate 32bit/64bit/x32 code

  --divide                ignored

  -march=CPU[,+EXTENSION...]

                          generate code for CPU and EXTENSION, CPU is one of:

                           generic32, generic64, i386, i486, i586, i686,

                           pentium, pentiumpro, pentiumii, pentiumiii, pentium4,

                           prescott, nocona, core, core2, corei7, l1om, k1om,

                           k6, k6_2, athlon, opteron, k8, amdfam10, bdver1,

                           bdver2, bdver3, btver1, btver2

                          EXTENSION is combination of:

                           8087, 287, 387, no87, mmx, nommx, sse, sse2, sse3,

                           ssse3, sse4.1, sse4.2, sse4, nosse, avx, avx2, noavx,

                           vmx, vmfunc, smx, xsave, xsaveopt, aes, pclmul,

                           fsgsbase, rdrnd, f16c, bmi2, fma, fma4, xop, lwp,

                           movbe, cx16, ept, lzcnt, hle, rtm, invpcid, clflush,

                           nop, syscall, rdtscp, 3dnow, 3dnowa, padlock, svme,

                           sse4a, abm, bmi, tbm, adx, rdseed, prfchw, smap

  -mtune=CPU              optimize for CPU, CPU is one of:

                           generic32, generic64, i8086, i186, i286, i386, i486,

                           i586, i686, pentium, pentiumpro, pentiumii,

                           pentiumiii, pentium4, prescott, nocona, core, core2,

                           corei7, l1om, k1om, k6, k6_2, athlon, opteron, k8,

                           amdfam10, bdver1, bdver2, bdver3, btver1, btver2

  -msse2avx               encode SSE instructions with VEX prefix

  -msse-check=[none|error|warning]

                          check SSE instructions

  -moperand-check=[none|error|warning]

                          check operand combinations for validity

  -mavxscalar=[128|256]   encode scalar AVX instructions with specific vector

                           length

  -mmnemonic=[att|intel]  use AT&T/Intel mnemonic

  -msyntax=[att|intel]    use AT&T/Intel syntax

  -mindex-reg             support pseudo index registers

  -mnaked-reg             don't require `%' prefix for registers

  -mold-gcc               support old (<= 2.8.1) versions of gcc


Report bugs to <mingw-w64-public@lists.sourceforge.net>



Posted by JunkMam
,

 mcm[각주:1]는 메모리가 많이 들어간 문제점이 있었다.(약 5.2G가량 들게 된다.)


 그래서 조금 시간이 걸리더라도, 메모리를 적게먹는(약 1G가량 먹는) lpaq9m을 찾고 있다가 찾게된 프로그램이다.


 이것은 mcm보다 압축율이 높은 것 같다.


 메모리 할당은 약 500Mb가 들게 된다.


 현재 테스트 한 결과 압축률이 mcm보다 높아서 이용하면, 많이 압축 할 수 있을 것 같다.


 다운 경로는 다음과 같다.


 TANGELO


 문제는 속도가 느리다는 점인데, 속도만 개선되면, 꽤 쓸만 할 것 같다.


 현재, 안전한지 확인은 하지 않았지만, 압축율/메모리 할당량이 paq보단 낮은거 보면, 괜찮은 것 같다.


 FP8이란, Fast PAQ의 약칭으로 PAQ 압축을 빠르게 개선한 것이다.

 lpaq9m은 이것의 2~3배 되는 메모리에 속도는 유사하다.

Posted by JunkMam
,