#include extern unsigned char code_begin; extern unsigned char code_end; int main () { unsigned char *p = &code_begin; while ( p <= &code_end ) printf("%02X", *(p++)); printf("\n"); fflush(stdout); __asm__ volatile ( "code_begin: \n" " xor %eax, %eax \n" // 0x31 0xc0 " xor %ebx, %ebx \n" // 0x31 0xdb " xor %edx, %edx \n" // 0x31 0xd2 " mov $4, %al \n" // 0xb0 0x04 " inc %ebx \n" // 0x43 ".byte 0xe8 \n" // 0xe8 (near rel. call) ".4byte 0x00000000 \n" // 0x00 0x00 0x00 0x00 " pop %ecx \n" // 0x59 " add $15, %ecx \n" // 0x83 0xc1 0x0f (pos) " mov $51, %dl \n" // 0xb2 LEN (length) " int $0x80 \n" // 0xcd 0x80 " xor %eax, %eax \n" // 0x31 0xc0 " xor %ebx, %ebx \n" // 0x31 0xdb " inc %eax \n" // 0x40 " int $0x80 \n" // 0xcd 0x80 ".ascii \"Dienstag, 06.01. ChaosTreff im \" \n" ".ascii \"Kaeuzchen ab 19:00.\\n\" \n" "code_end: \n" ); return 0; }