You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
/// Get the address of the next instruction to be disassembled
788
+
///
789
+
/// ```
790
+
/// # use capstone::prelude::*;
791
+
/// # let cs = Capstone::new().x86().mode(arch::x86::ArchMode::Mode32).build().unwrap();
792
+
/// let code = b"\x90";
793
+
/// let mut iter = cs.disasm_iter(code, 0x1000).unwrap();
794
+
/// assert_eq!(iter.addr(), 0x1000);
795
+
/// iter.next();
796
+
/// assert_eq!(iter.addr(), 0x1001);
797
+
/// ```
798
+
pubfnaddr(&self) -> u64{
799
+
self.addr
800
+
}
801
+
802
+
/// Reset the iterator to disassemble in the specified code buffer
803
+
///
804
+
/// ```
805
+
/// # use capstone::prelude::*;
806
+
/// # let cs = Capstone::new().x86().mode(arch::x86::ArchMode::Mode32).build().unwrap();
807
+
/// let code = b"\x90";
808
+
/// let mut iter = cs.disasm_iter(code, 0x1000).unwrap();
809
+
/// assert_eq!(iter.addr(), 0x1000);
810
+
/// assert_eq!(iter.code(), code);
811
+
/// iter.next();
812
+
/// assert_eq!(iter.addr(), 0x1001);
813
+
/// assert_eq!(iter.code(), b"");
814
+
/// let new_code = b"\xc3";
815
+
/// iter.reset(new_code, 0x2000);
816
+
/// assert_eq!(iter.addr(), 0x2000);
817
+
/// assert_eq!(iter.code(), new_code);
818
+
/// ```
819
+
pubfnreset(&mutself,code:&'buf[u8],addr:u64){
820
+
self.code = code.as_ptr();
821
+
self.size = code.len();
822
+
self.addr = addr;
823
+
}
824
+
825
+
/// Extract the underlying buffer for reuse.
826
+
/// ```
827
+
/// # use capstone::prelude::*;
828
+
/// # let cs = Capstone::new().x86().mode(arch::x86::ArchMode::Mode32).build().unwrap();
829
+
/// let code = b"\x90";
830
+
/// let mut iter = cs.disasm_iter(code, 0x1000).unwrap();
831
+
/// assert!(iter.next().is_some());
832
+
/// // reuse buffer
833
+
/// let mut buffer = iter.into_buffer();
834
+
/// let mut iter2 = cs.disasm_iter_with_buffer(code, 0x2000, &mut buffer);
835
+
/// assert!(iter2.next().is_some());
836
+
/// ```
837
+
pubfninto_buffer(self) -> DisasmBuffer<'cs>{
838
+
self.buffer
653
839
}
654
840
}
655
841
656
-
impl<'cs,'buf>DisasmIter<'cs,'buf>{
842
+
/// Structure to handle iterative disassembly with provided [`DisasmBuffer`](DisasmBuffer).
843
+
///
844
+
/// Create with a [`Capstone`](Capstone) instance: [`Capstone::disasm_iter_with_buffer`](Capstone::disasm_iter_with_buffer).
845
+
///
846
+
/// # Lifetimes
847
+
///
848
+
/// `'cs` is the lifetime of the [`Capstone`](Capstone) instance.
849
+
/// `'dbuf` is the lifetime of the user provided [`DisasmBuffer`](DisasmBuffer) in [`Capstone::disasm_iter_with_buffer`](Capstone::disasm_iter_with_buffer).
850
+
/// `'buf` is the lifetime of the user provided code buffer in [`Capstone::disasm_iter_with_buffer`](Capstone::disasm_iter_with_buffer).
851
+
pubstructDisasmIterWithBuffer<'cs,'dbuf,'buf>{
852
+
buffer:&'dbufmutDisasmBuffer<'cs>,// buffer for current instruction to be processed
853
+
code:*constu8,// pointer to the code buffer
854
+
size:usize,// size of the code buffer
855
+
addr:u64,// current address
856
+
_data:PhantomData<&'buf()>,// used to make sure code lifetime doesn't exceed user provided array
0 commit comments