| 1 | #include <cstdint> |
| 2 | |
| 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 | |