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 }