File tree Expand file tree Collapse file tree 4 files changed +16
-12
lines changed
Expand file tree Collapse file tree 4 files changed +16
-12
lines changed Original file line number Diff line number Diff line change @@ -105,6 +105,8 @@ impl Seek for BinaryReader {
105105 SeekFrom :: Current ( offset) => self . seek_to_relative_offset ( offset) ,
106106 SeekFrom :: Start ( offset) => self . seek_to_offset ( offset) ,
107107 SeekFrom :: End ( end_offset) => {
108+ // We do NOT need to add the image base here as
109+ // the reader (unlike the writer) can set the virtual base.
108110 let offset =
109111 self . view
110112 . len ( )
Original file line number Diff line number Diff line change 1717use binaryninjacore_sys:: * ;
1818use std:: fmt:: Debug ;
1919
20- use crate :: binary_view:: { BinaryView , BinaryViewBase } ;
20+ use crate :: binary_view:: { BinaryView , BinaryViewBase , BinaryViewExt } ;
2121use crate :: Endianness ;
2222
2323use crate :: rc:: Ref ;
@@ -85,14 +85,13 @@ impl Seek for BinaryWriter {
8585 SeekFrom :: Current ( offset) => self . seek_to_relative_offset ( offset) ,
8686 SeekFrom :: Start ( offset) => self . seek_to_offset ( offset) ,
8787 SeekFrom :: End ( end_offset) => {
88- let offset =
89- self . view
90- . len ( )
91- . checked_add_signed ( end_offset)
92- . ok_or ( std:: io:: Error :: new (
93- ErrorKind :: Other ,
94- "Seeking from end overflowed" ,
95- ) ) ?;
88+ let view_end = self . view . original_image_base ( ) + self . view . len ( ) ;
89+ let offset = view_end
90+ . checked_add_signed ( end_offset)
91+ . ok_or ( std:: io:: Error :: new (
92+ ErrorKind :: Other ,
93+ "Seeking from end overflowed" ,
94+ ) ) ?;
9695 self . seek_to_offset ( offset) ;
9796 }
9897 } ;
Original file line number Diff line number Diff line change 11use binaryninja:: binary_reader:: BinaryReader ;
2- use binaryninja:: binary_view:: BinaryViewBase ;
2+ use binaryninja:: binary_view:: { BinaryViewBase , BinaryViewExt } ;
33use binaryninja:: headless:: Session ;
44use rstest:: * ;
55use std:: io:: { Read , Seek , SeekFrom } ;
@@ -55,6 +55,9 @@ fn test_binary_reader_read(_session: &Session) {
5555 let view = binaryninja:: load ( out_dir. join ( "atox.obj" ) ) . expect ( "Failed to create view" ) ;
5656 let mut reader = BinaryReader :: new ( & view) ;
5757
58+ // We want to do seeks with the image base.
59+ reader. set_virtual_base ( view. original_image_base ( ) ) ;
60+
5861 reader
5962 . seek ( SeekFrom :: Start ( 0 ) )
6063 . expect ( "Failed to seek to start" ) ;
Original file line number Diff line number Diff line change 11use binaryninja:: binary_reader:: BinaryReader ;
2- use binaryninja:: binary_view:: BinaryViewBase ;
2+ use binaryninja:: binary_view:: { BinaryViewBase , BinaryViewExt } ;
33use binaryninja:: binary_writer:: BinaryWriter ;
44use binaryninja:: headless:: Session ;
55use rstest:: * ;
@@ -17,7 +17,7 @@ fn test_binary_writer_seek(_session: &Session) {
1717 let out_dir = env ! ( "OUT_DIR" ) . parse :: < PathBuf > ( ) . unwrap ( ) ;
1818 let view = binaryninja:: load ( out_dir. join ( "atox.obj" ) ) . expect ( "Failed to create view" ) ;
1919 let mut writer = BinaryWriter :: new ( & view) ;
20- let end_offset = view. len ( ) ;
20+ let end_offset = view. original_image_base ( ) + view . len ( ) ;
2121
2222 // Test seeking to a specific position
2323 writer
You can’t perform that action at this time.
0 commit comments