\begin{Verbatim}[commandchars=\\\{\}] \PY{c+c1}{// gcc pwnable.c} \PY{c+cp}{\PYZsh{}}\PY{c+cp}{include}\PY{+w}{ }\PY{c+cpf}{\PYZlt{}stdio.h\PYZgt{}} \PY{c+cp}{\PYZsh{}}\PY{c+cp}{include}\PY{+w}{ }\PY{c+cpf}{\PYZlt{}stdlib.h\PYZgt{}} \PY{c+cp}{\PYZsh{}}\PY{c+cp}{include}\PY{+w}{ }\PY{c+cpf}{\PYZlt{}string.h\PYZgt{}} \PY{c+cp}{\PYZsh{}}\PY{c+cp}{include}\PY{+w}{ }\PY{c+cpf}{\PYZlt{}unistd.h\PYZgt{}} \PY{c+cp}{\PYZsh{}}\PY{c+cp}{include}\PY{+w}{ }\PY{c+cpf}{\PYZlt{}sys/mman.h\PYZgt{}} \PY{k+kt}{long}\PY{+w}{ }\PY{n+nf}{compute}\PY{p}{(}\PY{k+kt}{int}\PY{+w}{ }\PY{n}{c}\PY{p}{)}\PY{+w}{ }\PY{p}{\PYZob{}} \PY{+w}{ }\PY{k+kt}{long}\PY{+w}{ }\PY{n}{i}\PY{+w}{ }\PY{o}{=}\PY{+w}{ }\PY{l+m+mi}{0}\PY{p}{;} \PY{+w}{ }\PY{k}{while}\PY{+w}{ }\PY{p}{(}\PY{n}{c}\PY{+w}{ }\PY{o}{\PYZgt{}}\PY{+w}{ }\PY{l+m+mi}{1}\PY{p}{)}\PY{+w}{ }\PY{p}{\PYZob{}} \PY{+w}{ }\PY{n}{i}\PY{o}{+}\PY{o}{+}\PY{p}{;} \PY{+w}{ }\PY{k}{if}\PY{+w}{ }\PY{p}{(}\PY{n}{c}\PY{o}{\PYZpc{}}\PY{l+m+mi}{2}\PY{+w}{ }\PY{o}{=}\PY{o}{=}\PY{+w}{ }\PY{l+m+mi}{0}\PY{p}{)}\PY{+w}{ }\PY{n}{c}\PY{+w}{ }\PY{o}{/}\PY{o}{=}\PY{+w}{ }\PY{l+m+mi}{2}\PY{p}{;} \PY{+w}{ }\PY{k}{else}\PY{+w}{ }\PY{n}{c}\PY{+w}{ }\PY{o}{=}\PY{+w}{ }\PY{l+m+mi}{3}\PY{o}{*}\PY{n}{c}\PY{+w}{ }\PY{o}{+}\PY{+w}{ }\PY{l+m+mi}{1}\PY{p}{;} \PY{+w}{ }\PY{p}{\PYZcb{}} \PY{+w}{ }\PY{k}{return}\PY{+w}{ }\PY{n}{i}\PY{p}{;} \PY{p}{\PYZcb{}} \PY{k+kt}{int}\PY{+w}{ }\PY{n+nf}{main}\PY{p}{(}\PY{p}{)}\PY{+w}{ }\PY{p}{\PYZob{}} \PY{+w}{ }\PY{k+kt}{int}\PY{+w}{ }\PY{n}{uid}\PY{+w}{ }\PY{o}{=}\PY{+w}{ }\PY{l+m+mi}{0}\PY{p}{;} \PY{+w}{ }\PY{k+kt}{void}\PY{o}{*}\PY{+w}{ }\PY{n}{buffer}\PY{+w}{ }\PY{o}{=}\PY{+w}{ }\PY{n}{mmap}\PY{p}{(}\PY{n+nb}{NULL}\PY{p}{,}\PY{+w}{ }\PY{l+m+mh}{0x1000}\PY{p}{,}\PY{+w}{ }\PY{n}{PROT\PYZus{}WRITE}\PY{+w}{ }\PY{o}{|}\PY{+w}{ }\PY{n}{PROT\PYZus{}EXEC}\PY{p}{,}\PY{+w}{ }\PY{n}{MAP\PYZus{}ANON}\PY{+w}{ }\PY{o}{|}\PY{+w}{ }\PY{n}{MAP\PYZus{}PRIVATE}\PY{p}{,}\PY{+w}{ }\PY{l+m+mi}{\PYZhy{}1}\PY{p}{,}\PY{+w}{ }\PY{l+m+mi}{0}\PY{p}{)}\PY{p}{;} \PY{+w}{ }\PY{n}{puts}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Welcome to AIC Factory Terminal.}\PY{l+s}{\PYZdq{}}\PY{p}{)}\PY{p}{;} \PY{+w}{ }\PY{n}{puts}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{WARNING: The power system is about to reach its capacity limit.}\PY{l+s}{\PYZdq{}}\PY{p}{)}\PY{p}{;} \PY{+w}{ }\PY{n}{puts}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{WARNING: To prevent draining, your power usage for this session will be limited.}\PY{l+s}{\PYZdq{}}\PY{p}{)}\PY{p}{;} \PY{+w}{ }\PY{n}{puts}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Now waiting for input.}\PY{l+s}{\PYZdq{}}\PY{p}{)}\PY{p}{;} \PY{+w}{ }\PY{k+kt}{ssize\PYZus{}t}\PY{+w}{ }\PY{n}{input\PYZus{}size}\PY{+w}{ }\PY{o}{=}\PY{+w}{ }\PY{n}{read}\PY{p}{(}\PY{n}{STDIN\PYZus{}FILENO}\PY{p}{,}\PY{+w}{ }\PY{n}{buffer}\PY{p}{,}\PY{+w}{ }\PY{l+m+mh}{0x1000}\PY{p}{)}\PY{p}{;} \PY{+w}{ }\PY{k}{if}\PY{+w}{ }\PY{p}{(}\PY{n}{input\PYZus{}size}\PY{+w}{ }\PY{o}{\PYZgt{}}\PY{+w}{ }\PY{l+m+mi}{0}\PY{p}{)}\PY{+w}{ }\PY{p}{\PYZob{}} \PY{+w}{ }\PY{k+kt}{long}\PY{+w}{ }\PY{k+kt}{long}\PY{+w}{ }\PY{n}{accu}\PY{+w}{ }\PY{o}{=}\PY{+w}{ }\PY{l+m+mi}{0}\PY{p}{;} \PY{+w}{ }\PY{k+kt}{unsigned}\PY{+w}{ }\PY{k+kt}{char}\PY{+w}{ }\PY{o}{*}\PY{n}{buf\PYZus{}ptr}\PY{+w}{ }\PY{o}{=}\PY{+w}{ }\PY{p}{(}\PY{k+kt}{unsigned}\PY{+w}{ }\PY{k+kt}{char}\PY{+w}{ }\PY{o}{*}\PY{p}{)}\PY{n}{buffer}\PY{p}{;} \PY{+w}{ }\PY{k}{for}\PY{+w}{ }\PY{p}{(}\PY{k+kt}{int}\PY{+w}{ }\PY{n}{i}\PY{+w}{ }\PY{o}{=}\PY{+w}{ }\PY{l+m+mi}{0}\PY{p}{;}\PY{+w}{ }\PY{n}{i}\PY{+w}{ }\PY{o}{\PYZlt{}}\PY{+w}{ }\PY{n}{input\PYZus{}size}\PY{p}{;}\PY{+w}{ }\PY{n}{i}\PY{o}{+}\PY{o}{+}\PY{p}{)}\PY{+w}{ }\PY{p}{\PYZob{}} \PY{+w}{ }\PY{k+kt}{long}\PY{+w}{ }\PY{n}{cur}\PY{+w}{ }\PY{o}{=}\PY{+w}{ }\PY{n}{compute}\PY{p}{(}\PY{n}{buf\PYZus{}ptr}\PY{p}{[}\PY{n}{i}\PY{p}{]}\PY{p}{)}\PY{p}{;} \PY{+w}{ }\PY{c+c1}{// printf(\PYZdq{}\PYZpc{}ld \PYZpc{}d\PYZbs{}n\PYZdq{}, cur, buf\PYZus{}ptr[i]);} \PY{+w}{ }\PY{k}{if}\PY{+w}{ }\PY{p}{(}\PY{n}{cur}\PY{+w}{ }\PY{o}{\PYZgt{}}\PY{+w}{ }\PY{l+m+mi}{35}\PY{p}{)}\PY{+w}{ }\PY{p}{\PYZob{}} \PY{+w}{ }\PY{n}{puts}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Consuming too much computational power. Aborting...}\PY{l+s}{\PYZdq{}}\PY{p}{)}\PY{p}{;} \PY{+w}{ }\PY{n}{exit}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} \PY{+w}{ }\PY{p}{\PYZcb{}} \PY{+w}{ }\PY{n}{accu}\PY{+w}{ }\PY{o}{+}\PY{o}{=}\PY{+w}{ }\PY{n}{cur}\PY{p}{;} \PY{+w}{ }\PY{p}{\PYZcb{}} \PY{+w}{ }\PY{c+c1}{// Length limit perhaps} \PY{+w}{ }\PY{k}{if}\PY{+w}{ }\PY{p}{(}\PY{n}{accu}\PY{+w}{ }\PY{o}{\PYZgt{}}\PY{+w}{ }\PY{l+m+mi}{200}\PY{p}{)}\PY{+w}{ }\PY{p}{\PYZob{}} \PY{+w}{ }\PY{n}{puts}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Accumulative power usage is too high. Aborting...}\PY{l+s}{\PYZdq{}}\PY{p}{)}\PY{p}{;} \PY{+w}{ }\PY{n}{exit}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} \PY{+w}{ }\PY{p}{\PYZcb{}} \PY{+w}{ }\PY{p}{\PYZcb{}}\PY{+w}{ }\PY{k}{else}\PY{+w}{ }\PY{p}{\PYZob{}} \PY{+w}{ }\PY{n}{puts}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Error reading input.}\PY{l+s}{\PYZdq{}}\PY{p}{)}\PY{p}{;} \PY{+w}{ }\PY{p}{\PYZcb{}} \PY{+w}{ }\PY{n}{puts}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Now executing...}\PY{l+s}{\PYZdq{}}\PY{p}{)}\PY{p}{;} \PY{+w}{ }\PY{p}{(}\PY{p}{(}\PY{k+kt}{void}\PY{+w}{ }\PY{p}{(}\PY{o}{*}\PY{p}{)}\PY{p}{(}\PY{k+kt}{void}\PY{p}{)}\PY{p}{)}\PY{n}{buffer}\PY{p}{)}\PY{p}{(}\PY{p}{)}\PY{p}{;} \PY{+w}{ }\PY{k}{if}\PY{+w}{ }\PY{p}{(}\PY{n}{uid}\PY{+w}{ }\PY{o}{=}\PY{o}{=}\PY{+w}{ }\PY{l+m+mh}{0x1337}\PY{p}{)}\PY{+w}{ }\PY{p}{\PYZob{}} \PY{+w}{ }\PY{n}{puts}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{Power user detected. Granting full access...}\PY{l+s}{\PYZdq{}}\PY{p}{)}\PY{p}{;} \PY{+w}{ }\PY{p}{\PYZcb{}} \PY{+w}{ }\PY{k}{return}\PY{+w}{ }\PY{l+m+mi}{0}\PY{p}{;} \PY{p}{\PYZcb{}} \end{Verbatim}