示例#1
3
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
  if (Size < 14) return 0;
  uint64_t x = 0;
  uint32_t y = 0;
  uint32_t z = 0;
  memcpy(&x, Data, sizeof(x));
  memcpy(&y, Data + Size / 2, sizeof(y));
  memcpy(&z, Data + Size - sizeof(z), sizeof(z));

  x = __builtin_bswap64(x);
  y = __builtin_bswap32(y);
  z = __builtin_bswap32(z);
  const bool k32bit = sizeof(void*) == 4;

  if ((k32bit || x == 0x46555A5A5A5A5546ULL) &&
      z == 0x4F4B &&
      y == 0x66757A7A &&
      true
      ) {
    if (Data[Size - 5] == 'z') {
      fprintf(stderr, "BINGO; Found the target\n");
      exit(1);
    }
  }
  return 0;
}
示例#2
0
static inline void bswap128(uint128_t *dst, const uint128_t *src)
{
	uint64_t tmp;

	tmp = __builtin_bswap64(src->ll[1]);
	dst->ll[1] = __builtin_bswap64(src->ll[0]);
	dst->ll[0] = tmp;
}
示例#3
0
int main(int argc, const char * argv[])
{

    // Dumps a pbzx to stdout. Can work as a filter if no argument is specified

    char buffer[1024];
    int fd = 0;

    if (argc < 2) { fd  = 0 ;}
    else { fd = open (argv[1], O_RDONLY);
           if (fd < 0) { perror (argv[1]); exit(5); }
         }


    read (fd, buffer, 4);
    if (strncmp(buffer, "pbzx", 4)) { fprintf(stderr, "Can't find pbzx magic\n"); exit(0);}

    // Now, if it IS a pbzx

    uint64_t length = 0, flags = 0;

    read (fd, &flags, sizeof (uint64_t));
    flags = __builtin_bswap64(flags);

    fprintf(stderr,"Flags: 0x%llx\n", flags);

    int i = 0;
    int off = 0;

    while (flags &   0x01000000) { // have more chunks
    i++;
    read (fd, &flags, sizeof (uint64_t));
    flags = __builtin_bswap64(flags);
    read (fd, &length, sizeof (uint64_t));
    length = __builtin_bswap64(length);

    fprintf(stderr,"Chunk #%d (flags: %llx, length: %lld bytes)\n",i, flags,length);
     
    // Let's ignore the fact I'm allocating based on user input, etc..
    char *buf = malloc (length);
    read (fd, buf, length);

   // We want the XZ header/footer if it's the payload, but prepare_payload doesn't have that, 
    // so just warn.
    

    if (strncmp(buf, "\xfd""7zXZ\0", 6))  { fprintf (stderr, "Warning: Can't find XZ header. This is likely not XZ data.\n"); }
    else // if we have the header, we had better have a footer, too
    if (strncmp(buf + length -2, "YZ", 2)) { fprintf (stderr, "Warning: Can't find XZ footer. This is bad.\n"); }

    write (1, buf, length);

    }

    return 0;
} 
示例#4
0
static inline void
vfoo64 (unsigned long long* a)
{
  int i = 0;
  for (i = 0; i < N; ++i)
    a[i] = __builtin_bswap64 (a[i]);
}
示例#5
0
static int GDB_ParseCommonThreadInfo(char *out, GDBContext *ctx, int sig)
{
    u32 threadId = ctx->currentThreadId;
    ThreadContext regs;
    s64 dummy;
    u32 core;
    Result r = svcGetDebugThreadContext(&regs, ctx->debug, threadId, THREADCONTEXT_CONTROL_ALL);
    int n = sprintf(out, "T%02xthread:%x;", sig, threadId);

    if(R_FAILED(r))
        return n;

    r = svcGetDebugThreadParam(&dummy, &core, ctx->debug, ctx->currentThreadId, DBGTHREAD_PARAMETER_CPU_CREATOR); // Creator = "first ran, and running the thread"

    if(R_SUCCEEDED(r))
        n += sprintf(out + n, "core:%x;", core);

    for(u32 i = 0; i <= 12; i++)
        n += sprintf(out + n, "%x:%08x;", i, __builtin_bswap32(regs.cpu_registers.r[i]));

    n += sprintf(out + n, "d:%08x;e:%08x;f:%08x;19:%08x;",
        __builtin_bswap32(regs.cpu_registers.sp), __builtin_bswap32(regs.cpu_registers.lr), __builtin_bswap32(regs.cpu_registers.pc),
        __builtin_bswap32(regs.cpu_registers.cpsr));

    for(u32 i = 0; i < 16; i++)
    {
        u64 val;
        memcpy(&val, &regs.fpu_registers.d[i], 8);
        n += sprintf(out + n, "%x:%016llx;", 26 + i, __builtin_bswap64(val));
    }

    n += sprintf(out + n, "2a:%08x;2b:%08x;", __builtin_bswap32(regs.fpu_registers.fpscr), __builtin_bswap32(regs.fpu_registers.fpexc));

    return n;
}
示例#6
0
 size_t data_length() const noexcept {
   if (is_ext2())
       return __builtin_bswap64(*(uint64_t*) vla) & 0xffffffff;
   if (is_ext())
       return __builtin_bswap16(*(uint16_t*) vla);
   return payload();
 }
示例#7
0
文件: 8byte.c 项目: kal667/bitfield-c
uint8_t eightbyte_get_byte(uint64_t source, const uint8_t byte_index,
        const bool data_is_big_endian) {
    if(data_is_big_endian) {
        source = __builtin_bswap64(source);
    }
    return (source >> (EIGHTBYTE_BIT - ((byte_index + 1) * CHAR_BIT))) & 0xFF;
}
示例#8
0
文件: ticket.c 项目: NinjaBoyLao/FBI
Result ticket_get_title_id(u64* titleId, u8* ticket, size_t size) {
    if(ticket == NULL) {
        return R_APP_INVALID_ARGUMENT;
    }

    if(size < 4) {
        return R_APP_BAD_DATA;
    }

    u8 sigType = ticket[0x03];
    if(sigType >= NUM_SIG_TYPES) {
        return R_APP_BAD_DATA;
    }

    u32 offset = sigSizes[sigType] + 0x9C;
    if(offset + sizeof(u64) > size) {
        return R_APP_BAD_DATA;
    }

    if(titleId != NULL) {
        *titleId = __builtin_bswap64(*(u64*) &ticket[offset]);
    }

    return 0;
}
示例#9
0
int
main (void)
{
  unsigned long long arr[N];
  unsigned long long expect[N];
  int i;

  for (i = 0; i < N; ++i)
    {
      arr[i] = i;
      expect[i] = __builtin_bswap64 (i);
      if (y) /* Avoid vectorisation.  */
        abort ();
    }

  vfoo64 (arr);

  for (i = 0; i < N; ++i)
    {
      if (arr[i] != expect[i])
        abort ();
    }

  return 0;
}
示例#10
0
int crypto_stream_xor(unsigned char *out, const unsigned char *in,
                      unsigned long long inlen, const unsigned char *n,
                      const unsigned char *k)
{
#define PTR_ALIGN(ptr, mask) ((void *)((((long)(ptr)) + (mask)) & ~((long)(mask))))
    const unsigned long align = 4096;
    char ctxbuf[sizeof(struct blowfish_ctx) + align];
    struct blowfish_ctx *ctx = PTR_ALIGN(ctxbuf, align - 1);
    uint64_t iv;
    uint64_t block;

    blowfish_init(ctx, k, CRYPTO_KEYBYTES);
    iv = __builtin_bswap64(*(uint64_t *)n); /* be => le */

    while (likely(inlen >= BLOCKSIZE)) {
        block = __builtin_bswap64(iv++); /* le => be */

        blowfish_enc_blk(ctx, out, &block);

        if (unlikely(in)) {
            *(uint64_t *)out ^= *(uint64_t *)in;
            in += BLOCKSIZE;
        }

        out += BLOCKSIZE;
        inlen -= BLOCKSIZE;
    }

    if (unlikely(inlen > 0)) {
        /* handle remaining bytes */
        unsigned int i;

        block = __builtin_bswap64(iv); /* le => be */

        blowfish_enc_blk(ctx, &block, &block);

        if (in) {
            for (i = 0; i < inlen; i++)
                out[i] = in[i] ^ ((uint8_t*)&block)[i];
        } else {
            for (i = 0; i < inlen; i++)
                out[i] = ((uint8_t*)&block)[i];
        }
    }

    return 0;
}
示例#11
0
static uint64_t swap64(uint64_t v)
{
#define IS_LITTLE_ENDIAN (*(uint16_t *)"\0\xff" >= 0x100)
    if(IS_LITTLE_ENDIAN) {
        v = __builtin_bswap64(v);
    }
    return v;
}
示例#12
0
uint64_t foo64 (uint64_t a)
{
  uint64_t b;

  b = __builtin_bswap64 (a);

  return b;
}
示例#13
0
文件: endian.hpp 项目: abn/symboldb
inline unsigned long long
cpu_to_be_64(unsigned long long val)
{
  if (is_big_endian()) {
    return val;
  } else {
    return __builtin_bswap64(val);
  }
}
示例#14
0
template <> constexpr inline uint64_t bswap<uint64_t>(uint64_t x) noexcept
{
#if defined(HAVE___BUILTIN_BSWAP64)
    return __builtin_bswap64(x);
#else
    /// @todo create a fallback.
    static_assert(false, "Generic bswap64() not yet implemented.");
#endif
}
示例#15
0
int sai_deserialize_ip6_mask(
        _In_ const char *buffer,
        _Out_ sai_ip6_t mask)
{
    uint64_t value;

    int res = sai_deserialize_uint64(buffer, &value);

    if (res < 0 || value > 128)
    {
        SAI_META_LOG_WARN("failed to deserialize '%.*s' as ip6 mask", MAX_CHARS_PRINT, buffer);
        return SAI_SERIALIZE_ERROR;
    }

    uint64_t high = 0xFFFFFFFFFFFFFFFFUL;
    uint64_t low  = 0xFFFFFFFFFFFFFFFFUL;

    if (value == 128)
    {
    }
    else if (value == 64)
    {
        low = 0;
    }
    else if (value == 0)
    {
        low = 0;
        high = 0;
    }
    else if (value > 64)
    {
        low = low << (128 - value);
    }
    else
    {
        high = high << (64 - value);
        low = 0;
    }

    *((uint64_t*)mask) = __builtin_bswap64(high);
    *((uint64_t*)mask + 1) = __builtin_bswap64(low);

    return res;
}
示例#16
0
inline uint64_t LoadBigEndian64(uint64_t v)
{
#if defined(__GNUC__)
  return __builtin_bswap64(v);
#elif defined(_MSC_VER)
  return _byteswap_uint64(v);
#else
#error unsupported compiler
#endif
}
示例#17
0
    __INTRIN_INLINE uint64_t byteswap64(uint64_t value)
    {
#if defined(__GNUC__) || defined(__clang__)
        return __builtin_bswap64(value);
#elif defined(_MSC_VER)
        return _byteswap_uint64(value);
#else
#     error Unsupported platform
#endif
    }
示例#18
0
static Result networkinstall_get_src_size(void* data, u32 handle, u64* size) {
    network_install_data* networkInstallData = (network_install_data*) data;

    u64 netSize = 0;
    if(recvwait(networkInstallData->clientSocket, &netSize, sizeof(netSize), 0) < 0) {
        return R_FBI_ERRNO;
    }

    *size = __builtin_bswap64(netSize);
    return 0;
}
示例#19
0
文件: Kernel.hpp 项目: zhiayang/mx
	T le()
	{
		if(bits == 16)
			return __builtin_bswap16(this->val);

		else if(bits == 32)
			return __builtin_bswap32(this->val);

		else
			return __builtin_bswap64(this->val);
	}
示例#20
0
文件: tmd.c 项目: NinjaBoyLao/FBI
Result tmd_get_title_id(u64* titleId, u8* tmd, size_t size) {
    u8* data = NULL;
    Result res = tmd_get(&data, tmd, size, 0x4C, sizeof(u64));
    if(R_FAILED(res)) {
        return res;
    }

    if(titleId != NULL) {
        *titleId = __builtin_bswap64(*(u64*) data);
    }

    return 0;
}
示例#21
0
int sai_serialize_ip6_mask(
        _Out_ char *buffer,
        _In_ const sai_ip6_t mask)
{
    uint32_t n = 64;
    uint64_t tmp = 0xFFFFFFFFFFFFFFFFUL;

    uint64_t high = *((const uint64_t*)mask);
    uint64_t low  = *((const uint64_t*)mask + 1);

    high = __builtin_bswap64(high);
    low = __builtin_bswap64(low);

    if (high == tmp)
    {
        for (; (tmp != low) && tmp; tmp <<= 1, n--);

        if (tmp == low)
        {
            return sai_serialize_uint32(buffer, 64 + n);
        }
    }
    else if (low == 0)
    {
        for (; (tmp != high) && tmp; tmp <<= 1, n--);

        if (tmp == high)
        {
            return sai_serialize_uint32(buffer, n);
        }
    }

    char buf[PRIMITIVE_BUFFER_SIZE];

    sai_serialize_ip6(buf, mask);

    SAI_META_LOG_WARN("ipv6 mask %s has holes", buf);
    return SAI_SERIALIZE_ERROR;
}
示例#22
0
void DoubleFloatParser::doParseHead()
{
    object().setSize(64);
    union {
        int64_t i;
        double f;
    } val;
    object().file().read(reinterpret_cast<char* >(&val.i), 64);
    if(object().endianness() == Object::bigEndian)
        val.i = __builtin_bswap64(val.i);

    object().setValue(val.f);
}
示例#23
0
/* { dg-options "-O" } */
int
main (void)
{
  /* Test constant folding.  */
  extern void link_error (void);

  if (__builtin_bswap32(0xaabbccdd) != 0xddccbbaa)
    link_error ();

  if (__builtin_bswap64(0x1122334455667788ULL) != 0x8877665544332211ULL)
    link_error ();

  return 0;
}
示例#24
0
inline void byteswap<8>(const char* data, char* result) {
#ifdef PROTOZERO_USE_BUILTIN_BSWAP
    *reinterpret_cast<uint64_t*>(result) = __builtin_bswap64(*reinterpret_cast<const uint64_t*>(data));
#else
    result[7] = data[0];
    result[6] = data[1];
    result[5] = data[2];
    result[4] = data[3];
    result[3] = data[4];
    result[2] = data[5];
    result[1] = data[6];
    result[0] = data[7];
#endif
}
示例#25
0
    void set_payload(const size_t len)
    {
      uint16_t pbits = len;
      if      (len > 65535) pbits = 127;
      else if (len > 125)   pbits = 126;
      bits &= 0x80ff;
      bits |= (pbits & 0x7f) << 8;

      if (is_ext())
          *(uint16_t*) vla = __builtin_bswap16(len);
      else if (is_ext2())
          *(uint64_t*) vla = __builtin_bswap64(len);
      assert(data_length() == len);
    }
示例#26
0
int
main (void)
{
  int i;

  for (i = 0; i < N(uint32_ts); i++)
    if (__builtin_bswap32 (uint32_ts[i]) != my_bswap32 (uint32_ts[i]))
      abort ();

  for (i = 0; i < N(uint64_ts); i++)
    if (__builtin_bswap64 (uint64_ts[i]) != my_bswap64 (uint64_ts[i]))
      abort ();

  return 0;
}
示例#27
0
static uint64_t calc_hash(const char *url, size_t url_len, const char *etag, size_t etag_len)
{
    SHA256_CTX ctx;
    union {
        unsigned char bytes[SHA256_DIGEST_LENGTH];
        uint64_t u64;
    } md;

    SHA256_Init(&ctx);
    SHA256_Update(&ctx, url, url_len);
    SHA256_Update(&ctx, etag, etag_len);
    SHA256_Final(md.bytes, &ctx);

    if (*(uint16_t *)"\xde\xad" == 0xdead)
        return md.u64;
    else
        return __builtin_bswap64(md.u64);
}
示例#28
0
int main(int argc, char **argv) {
  int a;
  a = __builtin_bswap32(a);
  a = __builtin_bswap64(a);
  a = __builtin_constant_p(1);
  a = __builtin_constant_p("string");
  char *b = __builtin_strchr("string", 's');
  a = __builtin_expect(1, a);
  a = __builtin_strlen("string");
  a = __builtin_strcmp("string1", "string2");
  a = __builtin_offsetof(struct point, y);
  char c[100];
  b = __builtin_strcpy(c, "a");
  b = __builtin_strncpy(c, "a", 1);
  a = __builtin_ctzl(a);
  varargsfn(0);
  __builtin_prefetch(b);
  __builtin_prefetch(b, 1);
  __builtin_prefetch(b, 1, 1);
  return a;
}
示例#29
0
文件: main.cpp 项目: minh0722/HPC2015
static void reverse(
                        char* const inout,
                        const size_t chunk_count) {
    
    const size_t count = chunk_count * 64;
    
    for (size_t i = 0; i < count; i += 64) {
        
        //_mm_prefetch(inout + i + 8 * 64, _MM_HINT_T0);
        const uint64_t byteswap[8] = {
            __builtin_bswap64(reinterpret_cast< uint64_t* >(inout + i)[0]),
            __builtin_bswap64(reinterpret_cast< uint64_t* >(inout + i)[1]),
            __builtin_bswap64(reinterpret_cast< uint64_t* >(inout + i)[2]),
            __builtin_bswap64(reinterpret_cast< uint64_t* >(inout + i)[3]),
            __builtin_bswap64(reinterpret_cast< uint64_t* >(inout + i)[4]),
            __builtin_bswap64(reinterpret_cast< uint64_t* >(inout + i)[5]),
            __builtin_bswap64(reinterpret_cast< uint64_t* >(inout + i)[6]),
            __builtin_bswap64(reinterpret_cast< uint64_t* >(inout + i)[7])
        };
        
        for (size_t j = 0; j < 8; ++j)
            reinterpret_cast< uint64_t* >(inout + i)[j] = byteswap[7 - j];
    }
}
示例#30
0
  OrderBook &Subscribe(std::string instrument, void *data = NULL) {
    if (instrument.size() < 8) {
      instrument.insert(instrument.size(), 8 - instrument.size(), ' ');
    }
    uint64_t symbol = __builtin_bswap64(
        *reinterpret_cast<const uint64_t *>(instrument.data()));

    auto it = symbols_.find(symbol);
    if (it != symbols_.end()) {
      return books_[it->second];
    }

    if (books_.size() == MAXBOOK) {
      throw std::runtime_error("too many subscriptions");
    }

    books_.push_back(OrderBook());
    symbols_.emplace(symbol, books_.size() - 1);

    OrderBook &book = books_.back();
    book.SetUserData(data);
    return book;
  }