File: x86-gp-read.cpp

package info (click to toggle)
llvm-toolchain-14 1%3A14.0.6-12
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,496,180 kB
  • sloc: cpp: 5,593,972; ansic: 986,872; asm: 585,869; python: 184,223; objc: 72,530; lisp: 31,119; f90: 27,793; javascript: 9,780; pascal: 9,762; sh: 9,482; perl: 7,468; ml: 5,432; awk: 3,523; makefile: 2,538; xml: 953; cs: 573; fortran: 567
file content (33 lines) | stat: -rw-r--r-- 775 bytes parent folder | download | duplicates (32)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <cstdint>

int main() {
  constexpr uint32_t eax = 0x05060708;
  constexpr uint32_t ebx = 0x15161718;
  constexpr uint32_t ecx = 0x25262728;
  constexpr uint32_t edx = 0x35363738;
  constexpr uint32_t esp = 0x45464748;
  constexpr uint32_t ebp = 0x55565758;
  constexpr uint32_t esi = 0x65666768;
  constexpr uint32_t edi = 0x75767778;

  asm volatile(
    // save esp & ebp
    "movd    %%esp, %%mm0\n\t"
    "movd    %%ebp, %%mm1\n\t"
    "\n\t"
    "movl    %4, %%esp\n\t"
    "movl    %5, %%ebp\n\t"
    "\n\t"
    "int3\n\t"
    "\n\t"
    // restore esp & ebp
    "movd    %%mm0, %%esp\n\t"
    "movd    %%mm1, %%ebp\n\t"
    :
    : "a"(eax), "b"(ebx), "c"(ecx), "d"(edx), "i"(esp), "i"(ebp), "S"(esi),
      "D"(edi)
    : "%mm0", "%mm1"
  );

  return 0;
}