๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿดโ€โ˜ ๏ธ CTF ๐Ÿดโ€โ˜ ๏ธ/๐Ÿ’พ ํฌ๋„ˆ๋ธ” ๐Ÿ’พ

Flex & Bison ๊ธฐ๋ณธ ๊ฐœ๋… ๋ฐ linux ํ™˜๊ฒฝ ์„ธํŒ…

๋ฐ˜์‘ํ˜•

๊ธฐ๋ณธ ๊ฐœ๋…

"flex & bison"์€ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๊ตฌ์ถ•์— ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค์€ ์ฃผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋‚˜ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์™€ ๊ฐ™์€ ๊ณ ๊ธ‰ ์–ธ์–ด๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๋“ค์€ ์ž์ฒด ์–ธ์–ด๋ฅผ ๋งŒ๋“ค๊ณ , ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ฑฐ๋‚˜ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Flex (Fast Lexical Analyzer Generator)

  • Flex๋Š” ์ž…๋ ฅ์œผ๋กœ๋ถ€ํ„ฐ ํ† ํฐ์„ ์ธ์‹ํ•˜๊ณ  ๋ถ„๋ฆฌํ•˜๋Š” ๋ ‰์„œ(lexical analyzer)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
  • ํ† ํฐ์€ ์–ธ์–ด์—์„œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋Š” ์ตœ์†Œํ•œ์˜ ๋‹จ์œ„๋กœ, ๋ณ€์ˆ˜, ์ƒ์ˆ˜, ์—ฐ์‚ฐ์ž ๋“ฑ์ด ํ† ํฐ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Flex๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ •๊ทœ ํ‘œํ˜„์‹๊ณผ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋ ‰์„œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์–ธ์–ด์˜ ๊ตฌ๋ฌธ์„ ๋ถ„์„ํ•˜๊ณ  ํ† ํฐ์„ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Bison (GNU Bison)

  • Bison์€ ๋ฌธ๋ฒ• ๊ทœ์น™์— ๋”ฐ๋ผ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ปดํŒŒ์ผ๋Ÿฌ ๋˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํŒŒ์„œ(parser) ์ƒ์„ฑ๊ธฐ์ž…๋‹ˆ๋‹ค.
  • ์ด๋Ÿฌํ•œ ํŒŒ์„œ๋ฅผ ํ†ตํ•ด ์–ธ์–ด์˜ ๊ตฌ๋ฌธ์„ ์ดํ•ดํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Bison์€ ๋ฌธ๋ฒ• ๊ทœ์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™์œผ๋กœ ํŒŒ์‹ฑ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜์—ฌ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค.

 

ํ™˜๊ฒฝ์„ธํŒ…

Linux

% sudo apt-get update
% sudo apt install flex
% sudo apt install bison

Mac

// for intel chip
% brew install bison
// for m1 chip
% arch -arm64 brew install bison

 

Flex์˜ ์ฝ”๋“œ ๊ตฌ์กฐ

Flex ํ”„๋กœ๊ทธ๋žจ์€ %%์ค„๋กœ ๊ตฌ๋ถ„๋œ ์„ธ ๊ฐœ์˜ ์„น์…˜์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค

์ฒซ ๋ฒˆ์งธ ์„น์…˜์—๋Š” ์„ ์–ธ ๋ฐ ์˜ต์…˜ ์„ค์ •์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์„น์…˜์€ ํŒจํ„ด ๋ฐ ์ž‘์—… ๋ชฉ๋ก์ด ์„ธ ๋ฒˆ์งธ ์„น์…˜์€ ์ƒ์„ฑ๋œ ์Šค์บ๋„ˆ์— ๋ณต์‚ฌ๋˜๋Š” C ์ฝ”๋“œ์ด๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘์—…์˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • Example 1-1. Word Count fb1-1.l
 /* ์„ ์–ธ๋ถ€ */
%{
int chars = 0;
int words = 0;
int lines = 0;
%}

%%
 /* ์ž‘์—…๋ถ€ */
[a-zA-Z]+  { words++; chars += strlen(yytext); }
\\n         { chars++; lines++; }
.          { chars++; }

%%
 /* ์‹คํ–‰๋ถ€ */
main(int argc, char **argv)
{
  yylex();
  printf("%8d%8d%8d\\n", lines, words, chars);
}

1. ์„ ์–ธ๋ถ€

์„ ์–ธ๋ถ€์—์„œ %{ ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๋Š” %} ์ƒ์„ฑ๋œ C ์†Œ์Šค ํŒŒ์ผ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ chars, words, lines์— ๋Œ€ํ•œ ์ •์ˆ˜ํ˜• ๋ณ€์ˆ˜๋งŒ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

2. ์ž‘์—…๋ถ€

์ž‘์—…๋ถ€์—์„œ ๊ฐ ํŒจํ„ด์ด ์ค„์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์žˆ๊ณ  ๊ทธ ๋’ค์— ํŒจํ„ด์ด ์ผ์น˜ํ•  ๋•Œ ์‹คํ–‰ํ•  C ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. C ์ฝ”๋“œ๋Š” ํ•˜๋‚˜์˜ ๋ช…๋ น๋ฌธ์ด๊ฑฐ๋‚˜ ์ค‘๊ด„ํ˜ธ{ }๋กœ ๋ฌถ์ธ ์—ฌ๋Ÿฌ ์ค„ ๋ธ”๋ก์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์ฝ”๋“œ์˜ ํŒจํ„ด์„ ๋ณด๋ฉด [a-zA-Z]+ โ‡’ ํ•˜๋‚˜ ์ด์ƒ์˜ ์•ŒํŒŒ๋ฒณ์ธ ๊ฒฝ์šฐ, words, chars์˜ ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.

yytext โ‡’ ๋ฐฉ๊ธˆ ์ผ์น˜ํ•œ ์ž…๋ ฅ ํ…์ŠคํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

\\n โ‡’ ์ƒˆ์ค„์ด ์ถ”๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ, chars์™€ lines์˜ ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.

. โ‡’ ๋ชจ๋“  ๋ฌธ์ž์— ๋Œ€ํ•ด, chars์˜ ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.

3. ์‹คํ–‰๋ถ€

์‹คํ–‰๋ถ€์˜ C ์ฝ”๋“œ๋Š” flex์™€ ํ•จ๊ป˜ ์ƒ์„ฑ๋œ lexical ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

yylex() ์ฃผ๋กœ Flex์—์„œ ์ƒ์„ฑ๋œ lexical๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์†Œ์Šค ์ฝ”๋“œ๋‚˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ๋“ค์—ฌ ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ทœ์น™์— ๋”ฐ๋ผ ํ† ํฐ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

์ฝ”๋“œ ์‹คํ–‰

$ flex fb1-1.l
$ cc lex.yy.c -lfl
$ ./a.out
The boy stood on the burning deck
shelling peanuts by the peck
^D
2 12 63
$

 

์ฐธ๊ณ ๋ฌธ์„œ

https://web.iitd.ac.in/~sumeet/flex__bison.pdf

GitHub - jmparis/flex-bison-oreilly: Flex and bison sample code

 

GitHub - jmparis/flex-bison-oreilly: Flex and bison sample code

Flex and bison sample code. Contribute to jmparis/flex-bison-oreilly development by creating an account on GitHub.

github.com

youtube.com/@RyuJT658/videos?view=0&sort=dd&shelf_id=0

 

๋ฅ˜์ข…ํƒ

 

www.youtube.com

 

๋ฐ˜์‘ํ˜•