x86_imm.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "qword.h"
  2. #include "x86_imm.h"
  3. #include <stdio.h>
  4. unsigned int x86_imm_signsized( unsigned char * buf, size_t buf_len,
  5. void *dest, unsigned int size ) {
  6. signed char *cp = (signed char *) dest;
  7. signed short *sp = (signed short *) dest;
  8. int32_t *lp = (int32_t *) dest;
  9. qword_t *qp = (qword_t *) dest;
  10. if ( size > buf_len ) {
  11. return 0;
  12. }
  13. /* Copy 'size' bytes from *buf to *op
  14. * return number of bytes copied */
  15. switch (size) {
  16. case 1: /* BYTE */
  17. *cp = *((signed char *) buf);
  18. break;
  19. case 2: /* WORD */
  20. *sp = *((signed short *) buf);
  21. break;
  22. case 6:
  23. case 8: /* QWORD */
  24. *qp = *((qword_t *) buf);
  25. break;
  26. case 4: /* DWORD */
  27. default:
  28. *lp = *((int32_t *) buf);
  29. break;
  30. }
  31. return (size);
  32. }
  33. unsigned int x86_imm_sized( unsigned char * buf, size_t buf_len, void *dest,
  34. unsigned int size ) {
  35. unsigned char *cp = (unsigned char *) dest;
  36. unsigned short *sp = (unsigned short *) dest;
  37. uint32_t *lp = (uint32_t *) dest;
  38. qword_t *qp = (qword_t *) dest;
  39. if ( size > buf_len ) {
  40. return 0;
  41. }
  42. /* Copy 'size' bytes from *buf to *op
  43. * return number of bytes copied */
  44. switch (size) {
  45. case 1: /* BYTE */
  46. *cp = *((unsigned char *) buf);
  47. break;
  48. case 2: /* WORD */
  49. *sp = *((unsigned short *) buf);
  50. break;
  51. case 6:
  52. case 8: /* QWORD */
  53. *qp = *((qword_t *) buf);
  54. break;
  55. case 4: /* DWORD */
  56. default:
  57. *lp = *((uint32_t *) buf);
  58. break;
  59. }
  60. return (size);
  61. }