@@ -85,8 +85,8 @@ pub fn disasm_iseq_insn_range(iseq: IseqPtr, start_idx: u32, end_idx: u32) -> St
85
85
let blockid = block. get_blockid ( ) ;
86
86
if blockid. idx >= start_idx && blockid. idx < end_idx {
87
87
let end_idx = block. get_end_idx ( ) ;
88
- let start_addr = block. get_start_addr ( ) . unwrap ( ) . raw_ptr ( ) ;
89
- let end_addr = block. get_end_addr ( ) . unwrap ( ) . raw_ptr ( ) ;
88
+ let start_addr = block. get_start_addr ( ) . unwrap ( ) ;
89
+ let end_addr = block. get_end_addr ( ) . unwrap ( ) ;
90
90
let code_size = block. code_size ( ) ;
91
91
92
92
// Write some info about the current block
@@ -101,14 +101,17 @@ pub fn disasm_iseq_insn_range(iseq: IseqPtr, start_idx: u32, end_idx: u32) -> St
101
101
writeln ! ( out, "== {:=<60}" , block_ident) . unwrap ( ) ;
102
102
103
103
// Disassemble the instructions
104
- out. push_str ( & disasm_addr_range ( global_cb, start_addr, ( start_addr as usize + code_size) as * const u8 ) ) ;
104
+ for ( start_addr, end_addr) in global_cb. writable_addrs ( start_addr, end_addr) {
105
+ out. push_str ( & disasm_addr_range ( global_cb, start_addr, end_addr) ) ;
106
+ writeln ! ( out) . unwrap ( ) ;
107
+ }
105
108
106
109
// If this is not the last block
107
110
if block_idx < block_list. len ( ) - 1 {
108
111
// Compute the size of the gap between this block and the next
109
112
let next_block = block_list[ block_idx + 1 ] . borrow ( ) ;
110
- let next_start_addr = next_block. get_start_addr ( ) . unwrap ( ) . raw_ptr ( ) ;
111
- let gap_size = ( next_start_addr as usize ) - ( end_addr as usize ) ;
113
+ let next_start_addr = next_block. get_start_addr ( ) . unwrap ( ) ;
114
+ let gap_size = next_start_addr. into_usize ( ) - end_addr. into_usize ( ) ;
112
115
113
116
// Log the size of the gap between the blocks if nonzero
114
117
if gap_size > 0 {
@@ -127,7 +130,7 @@ pub fn dump_disasm_addr_range(cb: &CodeBlock, start_addr: CodePtr, end_addr: Cod
127
130
use std:: io:: Write ;
128
131
129
132
for ( start_addr, end_addr) in cb. writable_addrs ( start_addr, end_addr) {
130
- let disasm = disasm_addr_range ( cb, start_addr as * const u8 , end_addr as * const u8 ) ;
133
+ let disasm = disasm_addr_range ( cb, start_addr, end_addr) ;
131
134
if disasm. len ( ) > 0 {
132
135
match dump_disasm {
133
136
DumpDisasm :: Stdout => println ! ( "{disasm}" ) ,
@@ -141,7 +144,7 @@ pub fn dump_disasm_addr_range(cb: &CodeBlock, start_addr: CodePtr, end_addr: Cod
141
144
}
142
145
143
146
#[ cfg( feature = "disasm" ) ]
144
- pub fn disasm_addr_range ( cb : & CodeBlock , start_addr : * const u8 , end_addr : * const u8 ) -> String {
147
+ pub fn disasm_addr_range ( cb : & CodeBlock , start_addr : usize , end_addr : usize ) -> String {
145
148
let mut out = String :: from ( "" ) ;
146
149
147
150
// Initialize capstone
@@ -165,8 +168,8 @@ pub fn disasm_addr_range(cb: &CodeBlock, start_addr: *const u8, end_addr: *const
165
168
cs. set_skipdata ( true ) . unwrap ( ) ;
166
169
167
170
// Disassemble the instructions
168
- let code_size = end_addr as usize - start_addr as usize ;
169
- let code_slice = unsafe { std:: slice:: from_raw_parts ( start_addr, code_size) } ;
171
+ let code_size = end_addr - start_addr;
172
+ let code_slice = unsafe { std:: slice:: from_raw_parts ( start_addr as _ , code_size) } ;
170
173
let insns = cs. disasm_all ( code_slice, start_addr as u64 ) . unwrap ( ) ;
171
174
172
175
// For each instruction in this block
0 commit comments