/******************************************************************************
! (nitrous@fight:~/shellc0ding$)uname -a
! SunOS fight 5.9 Generic_112233-10 sun4u sparc SUNW,Ultra-2 Solaris
!
! Solaris/SPARC asm code
! write(1,"nitrous\n",8);
!
! nitrous <nitrous@danitrous.org>
! 08/04/2005
! Mexico

.globl _start
_start:
	mov	0x01,%o0	! 1 = STDOUT [first argument]
	set	0x6e697472,%l0	! %l0 = 'nitr' 
	set	0x6f75730a,%l1	! %l1 = 'ous\n'
	std	%l0,[ %sp - 8 ] ! store the string in the stack [double[64bits]]
	sub	%sp,0x08,%o1	! %sp-0x8= 'nitrous' address [second argument]
	mov	0x08,%o2	! 0x8 (bytes to print) [third argument]
	mov	0x4,%g1		! 0x4 = SYS_write()
	ta	8		! write(1,"nitrous\n",8)

	mov	0x1,%g1		! 0x1 = SYS_exit()
	ta	0x08		! exit(1)

*******************************************************************************/

char shellc0de[]=
	"\x90\x10\x20\x01"	/*	mov	1, %o0			*/
	"\x21\x1b\x9a\x5d"	/*	sethi	%hi(0x6e697400), %l0	*/
	"\xa0\x14\x20\x72"	/*	or	%l0, 0x72, %l0		*/
	"\x23\x1b\xdd\x5c"	/*	sethi	%hi(0x6f757000), %l1	*/
	"\xa2\x14\x63\x0a"	/*	or	%l1, 0x30a, $l1		*/
	"\xe0\x3b\xbf\xf8"	/*	std	%l0, [ %sp - 8 ]	*/
	"\x92\x23\xa0\x08"	/*	sub	%sp, 0x8, %o1		*/
	"\x94\x10\x20\x08"	/*	mov	0x8, %o2		*/
	"\x82\x10\x20\x04"	/*	mov	0x4, %g1		*/
	"\x91\xd0\x20\x08"	/*	ta	0x8			*/
	"\x82\x10\x20\x01"	/*	mov	0x1, %g1		*/
	"\x91\xd0\x20\x08";	/*	ta	0x8			*/

main()
{
	void (*pointer2func)() = (void *)shellc0de;
	printf("Shellc0de size: %d bytes\n",strlen(shellc0de));
	pointer2func();
}
