12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #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);
- }
|