brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · ccc50c8 Raw
111 lines · c
1#include <stdio.h>2 3// For the test case, we really want the the layout of this binary4// to be:5//6//   foo()7//   bar() - 4096 bytes of nop's8//   main()9//   "HI" string10//11// in reality getting this layout from the compiler and linker12// is a crapshoot, so I have yaml's checked in of the correct13// layout.  Recompiling from source may not get the needed14// binary layout.15 16static int bar();17static int foo() { return 5 + bar(); }18// A function of 4096 bytes, so when main() loads the19// address of foo() before this one, it has to subtract20// a 4096 page.21#define SIXTY_FOUR_BYTES_NOP                                                   \22  asm("nop");                                                                  \23  asm("nop");                                                                  \24  asm("nop");                                                                  \25  asm("nop");                                                                  \26  asm("nop");                                                                  \27  asm("nop");                                                                  \28  asm("nop");                                                                  \29  asm("nop");                                                                  \30  asm("nop");                                                                  \31  asm("nop");                                                                  \32  asm("nop");                                                                  \33  asm("nop");                                                                  \34  asm("nop");                                                                  \35  asm("nop");                                                                  \36  asm("nop");                                                                  \37  asm("nop");38 39static int bar() {40  SIXTY_FOUR_BYTES_NOP;41  SIXTY_FOUR_BYTES_NOP;42  SIXTY_FOUR_BYTES_NOP;43  SIXTY_FOUR_BYTES_NOP;44  SIXTY_FOUR_BYTES_NOP;45  SIXTY_FOUR_BYTES_NOP;46  SIXTY_FOUR_BYTES_NOP;47  SIXTY_FOUR_BYTES_NOP;48  SIXTY_FOUR_BYTES_NOP;49  SIXTY_FOUR_BYTES_NOP;50  SIXTY_FOUR_BYTES_NOP;51  SIXTY_FOUR_BYTES_NOP;52  SIXTY_FOUR_BYTES_NOP;53  SIXTY_FOUR_BYTES_NOP;54  SIXTY_FOUR_BYTES_NOP;55  SIXTY_FOUR_BYTES_NOP;56  SIXTY_FOUR_BYTES_NOP;57  SIXTY_FOUR_BYTES_NOP;58  SIXTY_FOUR_BYTES_NOP;59  SIXTY_FOUR_BYTES_NOP;60  SIXTY_FOUR_BYTES_NOP;61  SIXTY_FOUR_BYTES_NOP;62  SIXTY_FOUR_BYTES_NOP;63  SIXTY_FOUR_BYTES_NOP;64  SIXTY_FOUR_BYTES_NOP;65  SIXTY_FOUR_BYTES_NOP;66  SIXTY_FOUR_BYTES_NOP;67  SIXTY_FOUR_BYTES_NOP;68  SIXTY_FOUR_BYTES_NOP;69  SIXTY_FOUR_BYTES_NOP;70  SIXTY_FOUR_BYTES_NOP;71  SIXTY_FOUR_BYTES_NOP;72  SIXTY_FOUR_BYTES_NOP;73  SIXTY_FOUR_BYTES_NOP;74  SIXTY_FOUR_BYTES_NOP;75  SIXTY_FOUR_BYTES_NOP;76  SIXTY_FOUR_BYTES_NOP;77  SIXTY_FOUR_BYTES_NOP;78  SIXTY_FOUR_BYTES_NOP;79  SIXTY_FOUR_BYTES_NOP;80  SIXTY_FOUR_BYTES_NOP;81  SIXTY_FOUR_BYTES_NOP;82  SIXTY_FOUR_BYTES_NOP;83  SIXTY_FOUR_BYTES_NOP;84  SIXTY_FOUR_BYTES_NOP;85  SIXTY_FOUR_BYTES_NOP;86  SIXTY_FOUR_BYTES_NOP;87  SIXTY_FOUR_BYTES_NOP;88  SIXTY_FOUR_BYTES_NOP;89  SIXTY_FOUR_BYTES_NOP;90  SIXTY_FOUR_BYTES_NOP;91  SIXTY_FOUR_BYTES_NOP;92  SIXTY_FOUR_BYTES_NOP;93  SIXTY_FOUR_BYTES_NOP;94  SIXTY_FOUR_BYTES_NOP;95  SIXTY_FOUR_BYTES_NOP;96  SIXTY_FOUR_BYTES_NOP;97  SIXTY_FOUR_BYTES_NOP;98  SIXTY_FOUR_BYTES_NOP;99  SIXTY_FOUR_BYTES_NOP;100  SIXTY_FOUR_BYTES_NOP;101  SIXTY_FOUR_BYTES_NOP;102  SIXTY_FOUR_BYTES_NOP;103  SIXTY_FOUR_BYTES_NOP;104  return 5;105}106int main() {107  int (*f)(void) = foo;108  puts("HI");109  return f();110}111