2013. 5. 30. 22:51

python exploit 코드들에서 자주 나오는 lambda 사용법으로 인한 pack 에 대한 이해 


Lambda 표현식은 C언어의 메크로 함수와 비슷한 역할을 하는 것 같다.


g = lambda x,y : x*y

>> g(2,3)

6

>> g(3,4)

12

>>


p = lambda x : pack("<L" , x)

 

"  <  "  : little endian

"  >  "  : big endian


L : Unsigned Long 형태  (32bit 에서 자주쓰임)

Q : Unsinged Long Long 형태 (64bit에서 자주 쓰임)



p(0x08040552) 하면 little endian 으로 Long 형태로 변환되어 packing 된다.





Format        C Type         Python        

x         pad byte            no value         

c         char                   string         

b         signed char         integer         

B         unsigned char       integer         

?         _Bool                 bool        

h         short                     integer         

H         unsigned short      integer         

i         int                     integer         

I         unsigned int            integer or long         

l         long                     integer         

L         unsigned long       long         

q         long long               long        

Q         unsigned long     long      

f         float                     float         

d         double             float         

s         char[]             string         

p         char[]             string         

P         void *             long         



Character       Byte order       Size and alignment

@         native         native

=         native         standard

<         little-endian           standard

>         big-endian               standard

!         network (= big-endian)  standard



thanks for 충호~


Posted by k1rha