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