1 #include <cstdint>
2 
main()3 int main() {
4   constexpr uint32_t eax = 0x05060708;
5   constexpr uint32_t ebx = 0x15161718;
6   constexpr uint32_t ecx = 0x25262728;
7   constexpr uint32_t edx = 0x35363738;
8   constexpr uint32_t esp = 0x45464748;
9   constexpr uint32_t ebp = 0x55565758;
10   constexpr uint32_t esi = 0x65666768;
11   constexpr uint32_t edi = 0x75767778;
12 
13   asm volatile(
14     // save esp & ebp
15     "movd    %%esp, %%mm0\n\t"
16     "movd    %%ebp, %%mm1\n\t"
17     "\n\t"
18     "movl    %4, %%esp\n\t"
19     "movl    %5, %%ebp\n\t"
20     "\n\t"
21     "int3\n\t"
22     "\n\t"
23     // restore esp & ebp
24     "movd    %%mm0, %%esp\n\t"
25     "movd    %%mm1, %%ebp\n\t"
26     :
27     : "a"(eax), "b"(ebx), "c"(ecx), "d"(edx), "i"(esp), "i"(ebp), "S"(esi),
28       "D"(edi)
29     : "%mm0", "%mm1"
30   );
31 
32   return 0;
33 }
34