Mercurial > projects > ddbg_continued
comparison udis86-1.4/libudis86/udis86.c @ 1:4a9dcbd9e54f
-files of 0.13 beta
-fixes so that it now compiles with the current dmd version
author | marton@basel.hu |
---|---|
date | Tue, 05 Apr 2011 20:44:01 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:586e4a649642 | 1:4a9dcbd9e54f |
---|---|
1 /* ----------------------------------------------------------------------------- | |
2 * udis86.c | |
3 * | |
4 * Copyright (c) 2004, 2005, 2006, Vivek Mohan <vivek@sig9.com> | |
5 * All rights reserved. See LICENSE | |
6 * ----------------------------------------------------------------------------- | |
7 */ | |
8 | |
9 #include <stdlib.h> | |
10 #include <stdio.h> | |
11 #include <string.h> | |
12 | |
13 #include "input.h" | |
14 #include "extern.h" | |
15 | |
16 /* ============================================================================= | |
17 * ud_init() - Initializes ud_t object. | |
18 * ============================================================================= | |
19 */ | |
20 extern void | |
21 ud_init(struct ud* u) | |
22 { | |
23 memset((void*)u, 0, sizeof(struct ud)); | |
24 ud_set_mode(u, 16); | |
25 u->mnemonic = UD_Iinvalid; | |
26 ud_set_pc(u, 0); | |
27 #ifndef __UD_STANDALONE__ | |
28 ud_set_input_file(u, stdin); | |
29 #endif /* __UD_STANDALONE__ */ | |
30 } | |
31 | |
32 /* ============================================================================= | |
33 * ud_disassemble() - disassembles one instruction and returns the number of | |
34 * bytes disassembled. A zero means end of disassembly. | |
35 * ============================================================================= | |
36 */ | |
37 extern unsigned int | |
38 ud_disassemble(struct ud* u) | |
39 { | |
40 if (ud_input_end(u)) | |
41 return 0; | |
42 | |
43 | |
44 u->insn_buffer[0] = u->insn_hexcode[0] = 0; | |
45 | |
46 | |
47 if (ud_decode(u) == 0) | |
48 return 0; | |
49 if (u->translator) | |
50 u->translator(u); | |
51 return ud_insn_len(u); | |
52 } | |
53 | |
54 /* ============================================================================= | |
55 * ud_set_mode() - Set Disassemly Mode. | |
56 * ============================================================================= | |
57 */ | |
58 extern void | |
59 ud_set_mode(struct ud* u, uint8_t m) | |
60 { | |
61 switch(m) { | |
62 case 16: | |
63 case 32: | |
64 case 64: u->dis_mode = m ; return; | |
65 default: u->dis_mode = 16; return; | |
66 } | |
67 } | |
68 | |
69 /* ============================================================================= | |
70 * ud_set_vendor() - Set vendor. | |
71 * ============================================================================= | |
72 */ | |
73 extern void | |
74 ud_set_vendor(struct ud* u, unsigned v) | |
75 { | |
76 switch(v) { | |
77 case UD_VENDOR_INTEL: | |
78 u->vendor = v; | |
79 break; | |
80 default: | |
81 u->vendor = UD_VENDOR_AMD; | |
82 } | |
83 } | |
84 | |
85 /* ============================================================================= | |
86 * ud_set_pc() - Sets code origin. | |
87 * ============================================================================= | |
88 */ | |
89 extern void | |
90 ud_set_pc(struct ud* u, uint64_t o) | |
91 { | |
92 u->pc = o; | |
93 } | |
94 | |
95 /* ============================================================================= | |
96 * ud_set_syntax() - Sets the output syntax. | |
97 * ============================================================================= | |
98 */ | |
99 extern void | |
100 ud_set_syntax(struct ud* u, void (*t)(struct ud*)) | |
101 { | |
102 u->translator = t; | |
103 } | |
104 | |
105 /* ============================================================================= | |
106 * ud_insn() - returns the disassembled instruction | |
107 * ============================================================================= | |
108 */ | |
109 extern char* | |
110 ud_insn_asm(struct ud* u) | |
111 { | |
112 return u->insn_buffer; | |
113 } | |
114 | |
115 /* ============================================================================= | |
116 * ud_insn_offset() - Returns the offset. | |
117 * ============================================================================= | |
118 */ | |
119 extern uint64_t | |
120 ud_insn_off(struct ud* u) | |
121 { | |
122 return u->insn_offset; | |
123 } | |
124 | |
125 | |
126 /* ============================================================================= | |
127 * ud_insn_hex() - Returns hex form of disassembled instruction. | |
128 * ============================================================================= | |
129 */ | |
130 extern char* | |
131 ud_insn_hex(struct ud* u) | |
132 { | |
133 return u->insn_hexcode; | |
134 } | |
135 | |
136 /* ============================================================================= | |
137 * ud_insn_ptr() - Returns code disassembled. | |
138 * ============================================================================= | |
139 */ | |
140 extern uint8_t* | |
141 ud_insn_ptr(struct ud* u) | |
142 { | |
143 return u->inp_sess; | |
144 } | |
145 | |
146 /* ============================================================================= | |
147 * ud_insn_len() - Returns the count of bytes disassembled. | |
148 * ============================================================================= | |
149 */ | |
150 extern unsigned int | |
151 ud_insn_len(struct ud* u) | |
152 { | |
153 return u->inp_ctr; | |
154 } |