Symbian platform (C++)
SDK native APIs, runtime and tooling
Loading...
Searching...
No Matches
imports.h
Go to the documentation of this file.
1#ifndef SYMBIAN_E32_IMPORTS_H_
2#define SYMBIAN_E32_IMPORTS_H_
3
4#include <cstdint>
5#include <map>
6#include <set>
7#include <string>
8#include <string_view>
9#include <vector>
10
11#include <absl/status/statusor.h>
12
13#include "symbian/e32/e32.h"
14
15namespace symbian::e32::internal {
16
17struct Segment {
18 uint32_t offset = 0;
19 uint32_t address = 0;
20 uint32_t size = 0;
21};
22
23struct Section {
24 uint32_t type;
25 uint32_t flags;
26 uint32_t address;
27 uint32_t offset;
28 uint32_t size;
29 uint32_t link;
30 uint32_t info;
31 uint32_t entry_size;
32 std::string name;
33};
34
35struct ResolvedImports {
36 std::vector<ImportBlock> blocks;
37 std::map<std::string, uint32_t> functions;
38 std::map<std::string, uint32_t> objects;
39 std::set<uint32_t> object_slots;
40 std::map<std::string, uint32_t> plt_functions;
41 std::map<uint32_t, uint32_t> data_function_pointers;
42 size_t got_index = 0;
43 size_t dynamic_index = 0;
44 size_t relocation_index = 0;
45 size_t data_relocation_index = 0;
46};
47
48absl::StatusOr<ResolvedImports> ResolveImports(
49 std::string_view elf, const std::vector<Section>& sections,
50 const Segment& code, const std::vector<std::string>& proxies);
51
52absl::StatusOr<std::string> SymbolName(std::string_view elf,
53 const std::vector<Section>& sections,
54 const Section& symbols, size_t symbol);
55
56absl::Status CheckImportCall(std::string_view elf, const Segment& code,
57 uint32_t location, uint32_t type,
58 uint32_t slot_offset);
59
60std::string EncodeImports(const std::vector<ImportBlock>& imports);
61absl::StatusOr<std::vector<ImportBlock>> DecodeImports(std::string_view section,
62 std::string_view code,
63 uint32_t count);
64
65// Legacy EKA1 PE imports: block words are ordinals, and loader-owned slots
66// occupy a contiguous, zero-terminated IAT immediately after text_size.
67std::string EncodePeImports(const std::vector<ImportBlock>& imports);
68absl::StatusOr<std::vector<ImportBlock>> DecodePeImports(
69 std::string_view section, std::string_view code, uint32_t text_size,
70 uint32_t count);
71
72} // namespace symbian::e32::internal
73
74#endif // SYMBIAN_E32_IMPORTS_H_
std::vector< uint32_t > code
Definition e32.cc:70
Definition exports.cc:14
std::string EncodeImports(const std::vector< ImportBlock > &imports)
Definition imports.cc:534
std::string EncodePeImports(const std::vector< ImportBlock > &imports)
Definition imports.cc:605
absl::StatusOr< std::vector< ImportBlock > > DecodePeImports(std::string_view section, std::string_view code, uint32_t text_size, uint32_t count)
Definition imports.cc:615
absl::StatusOr< std::string > SymbolName(std::string_view elf, const std::vector< Section > &sections, const Section &symbols, size_t symbol)
Definition imports.cc:69
absl::StatusOr< std::vector< ImportBlock > > DecodeImports(std::string_view section, std::string_view code, uint32_t count)
Definition imports.cc:557
absl::StatusOr< ResolvedImports > ResolveImports(std::string_view elf, const std::vector< Section > &sections, const Segment &code, const std::vector< std::string > &proxies)
Definition imports.cc:84
absl::Status CheckImportCall(std::string_view elf, const Segment &code, uint32_t location, uint32_t type, uint32_t slot_offset)
Definition imports.cc:470
uint32_t entry_size
Definition exports.cc:73
uint32_t link
Definition exports.cc:72
uint32_t offset
Definition exports.cc:70
uint32_t size
Definition exports.cc:71
uint32_t address
Definition exports.cc:69
uint32_t type
Definition exports.cc:68