blob: f8746afff52d1e0297ce667a13e993a30fb91adb [file] [log] [blame]
#include <stdio.h>
#include <stdlib.h>
typedef unsigned long long int ULong;
ULong data;
ULong result;
extern void shrl32_with_0x10 ( void );
asm("\n"
"shrl32_with_0x10:\n"
"\tpushq %rdx\n"
"\tmovq data, %rdx\n"
"\tshr $0x10, %edx\n"
"\tjne shrl32_with_0x10_jump\n"
"\tshrl32_with_0x10_cont:\n"
"\tmovq %rdx, result\n"
"\tpopq %rdx\n"
"\tret\n"
"\tshrl32_with_0x10_jump:\n"
"\tmov $0xdeaddead, %edx\n"
"\tjmp shrl32_with_0x10_cont\n"
);
int main ( void )
{
char *p;
printf("\nshrl 0x10 with unitialised bits\n");
ULong *notinitialised = malloc(sizeof(ULong)); // Not initialised data.
data = *notinitialised;
p = (char*) &data;
p[0] = 0x11;
// p[1] = 0x22;
p[2] = 0x33;
p[3] = 0x44;
shrl32_with_0x10();
printf("non zero jump on p[2..3] 0x%016llx\n", result);
data = *notinitialised;
p = (char*) &data;
p[0] = 0x00;
// p[1] = 0x00;
p[2] = 0x00;
p[3] = 0x00;
shrl32_with_0x10();
printf("zero jump on p[2..3] 0x%016llx\n", result);
return 0;
}