#include "qword.h" #include "x86_imm.h" #include <stdio.h> unsigned int x86_imm_signsized( unsigned char * buf, size_t buf_len, void *dest, unsigned int size ) { signed char *cp = (signed char *) dest; signed short *sp = (signed short *) dest; int32_t *lp = (int32_t *) dest; qword_t *qp = (qword_t *) dest; if ( size > buf_len ) { return 0; } /* Copy 'size' bytes from *buf to *op * return number of bytes copied */ switch (size) { case 1: /* BYTE */ *cp = *((signed char *) buf); break; case 2: /* WORD */ *sp = *((signed short *) buf); break; case 6: case 8: /* QWORD */ *qp = *((qword_t *) buf); break; case 4: /* DWORD */ default: *lp = *((int32_t *) buf); break; } return (size); } unsigned int x86_imm_sized( unsigned char * buf, size_t buf_len, void *dest, unsigned int size ) { unsigned char *cp = (unsigned char *) dest; unsigned short *sp = (unsigned short *) dest; uint32_t *lp = (uint32_t *) dest; qword_t *qp = (qword_t *) dest; if ( size > buf_len ) { return 0; } /* Copy 'size' bytes from *buf to *op * return number of bytes copied */ switch (size) { case 1: /* BYTE */ *cp = *((unsigned char *) buf); break; case 2: /* WORD */ *sp = *((unsigned short *) buf); break; case 6: case 8: /* QWORD */ *qp = *((qword_t *) buf); break; case 4: /* DWORD */ default: *lp = *((uint32_t *) buf); break; } return (size); }