Skip to content

Commit b421487

Browse files
committed
Removed loader.architecture from py mapped view
Also updated Python API docs references to loader.architecture
1 parent 5088feb commit b421487

File tree

4 files changed

+12
-9
lines changed

4 files changed

+12
-9
lines changed

python/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,7 @@ def load(*args, **kwargs) -> BinaryView:
417417
...
418418
134
419419
420-
>>> with load(bytes.fromhex('5054ebfe'), options={'loader.architecture' : 'x86'}) as bv:
420+
>>> with load(bytes.fromhex('5054ebfe'), options={'loader.platform' : 'x86'}) as bv:
421421
... print(len(list(bv.functions)))
422422
...
423423
1

python/binaryview.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1458,7 +1458,7 @@ def serialize(cls, image_base: int, start: int, length: int, data_offset: int=0,
14581458
>>> rom_base = 0xffff0000
14591459
>>> segments = Segment.serialize(image_base=base, start=base, length=0x1000, data_offset=0, data_length=0x1000, flags=SegmentFlag.SegmentReadable|SegmentFlag.SegmentExecutable)
14601460
>>> segments = Segment.serialize(image_base=base, start=rom_base, length=0x1000, flags=SegmentFlag.SegmentReadable, segments=segments)
1461-
>>> view = load(bytes.fromhex('5054ebfe'), options={'loader.imageBase': base, 'loader.architecture': 'x86', 'loader.segments': segments})
1461+
>>> view = load(bytes.fromhex('5054ebfe'), options={'loader.imageBase': base, 'loader.platform': 'x86', 'loader.segments': segments})
14621462
```
14631463
"""
14641464
segments_list = json.loads(segments)

python/examples/mappedview.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from binaryninja.log import log_error
2727
from binaryninja import _binaryninjacore as core
2828
from binaryninja.architecture import Architecture
29+
from binaryninja.platform import Platform
2930
from binaryninja.binaryview import BinaryView
3031
from binaryninja.binaryview import BinaryViewType
3132
from binaryninja.enums import SegmentFlag
@@ -53,7 +54,7 @@ def is_valid_for_data(data):
5354
def get_load_settings_for_data(cls, data):
5455
# This method is optional. If provided this is where the Load Settings for a BinaryViewType are specified. Binary Ninja provides
5556
# some default read-only load settings which are:
56-
# ["loader.architecture", "loader.platform", "loader.entryPointOffset", "loader.imageBase", "loader.segments", "loader.sections"]
57+
# ["loader.platform", "loader.entryPointOffset", "loader.imageBase", "loader.segments", "loader.sections"]
5758
# The default load settings are provided for consistency and convenience.
5859
# The default load settings are always generated with a read-only indication which is respected by the UI.
5960
# The read-only indication is a property that consists of a JSON name/value pair ("readOnly" : true).
@@ -75,7 +76,7 @@ def get_load_settings_for_data(cls, data):
7576
load_settings = registered_view.get_default_load_settings_for_data(view)
7677

7778
# Specify default load settings that can be overridden (from the UI).
78-
overrides = ["loader.architecture", "loader.platform", "loader.entryPointOffset", "loader.imageBase", "loader.segments", "loader.sections"]
79+
overrides = ["loader.platform", "loader.entryPointOffset", "loader.imageBase", "loader.segments", "loader.sections"]
7980
for override in overrides:
8081
if load_settings.contains(override):
8182
load_settings.update_property(override, json.dumps({'readOnly': False}))
@@ -127,9 +128,9 @@ def init(self):
127128
# This allows us to generate default load options for the BinaryView. This step is not required but can be useful.
128129
load_settings = self.__class__.get_load_settings_for_data(self.parent_view)
129130

130-
arch = load_settings.get_string("loader.architecture", self)
131-
self.arch = Architecture[arch] # type: ignore
132-
self.platform = Architecture[arch].standalone_platform # type: ignore
131+
platform = load_settings.get_string("loader.platform", self)
132+
self.platform = Platform[platform]
133+
self.arch = self.platform.arch # type: ignore
133134
self.load_address = load_settings.get_integer("loader.imageBase", self)
134135
self.add_auto_segment(
135136
self.load_address, len(self.parent_view), 0, len(self.parent_view),

view/pe/teview.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,9 @@ bool TEView::Init()
214214
ReadTEImageHeader(reader, header);
215215
ReadTEImageSectionHeaders(reader, header.numberOfSections);
216216
m_headersOffset = header.strippedSize - EFI_TE_IMAGE_HEADER_SIZE;
217+
218+
// m_imageBase represents the base of the original PE image (before headers were stripped), not the base of the
219+
// TE image (bv.start)
217220
m_imageBase = header.imageBase;
218221

219222
// Set architecture and platform
@@ -223,8 +226,7 @@ bool TEView::Init()
223226
if (settings->Contains("loader.imageBase"))
224227
{
225228
uint64_t baseOverride = settings->Get<uint64_t>("loader.imageBase", this);
226-
// TE image bases represent the base of the original PE (before headers are stripped) - make this
227-
// adjustment for the user
229+
// Apply the headers offset adjustment to compute the base of the original PE image
228230
m_imageBase = baseOverride - m_headersOffset;
229231
}
230232

0 commit comments

Comments
 (0)