Code:
char code[] = {0x66, 0xB8, 0x04, 0x00, 0x00, 0x00, 0x66, 0xBB, 0x01, 0x00, 0x00, 0x00,
0x66, 0xB9, 0x28, 0x00, 0x00, 0x00, 0x66, 0xBA, 0x0C, 0x00, 0x00, 0x00,
0xCD, 0x80, 0x66, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x20, 0x66, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26,
0xCD, 0x80, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72,
0x6C, 0x64, 0x0A};
int accumulator;
int main(void) {
jump (code);
return 0;
}
int jump (char *addr) {
asm("jmp %1"
: "=r" (accumulator)
: "0" (accumulator), "g" (addr)
: "0");
return 0;
}
assembly:
Code:
1 _start:
2 00000000 66B804000000 mov eax, 4
3 00000006 66BB01000000 mov ebx, 1
4 0000000C 66B9[28000000] mov ecx, msg
5 00000012 66BA0C000000 mov edx, msg_l
6 00000018 CD80 int 80h
7
8 0000001A 66B801000000 mov eax, 1
9 00000020 66BB00000000 mov ebx, 0
10 00000026 CD80 int 80h
11
12 00000028 48656C6C6F20576F72- msg: db "Hello World", 10
13 00000031 6C640A
14 msg_l: equ $-msg
15