-
Notifications
You must be signed in to change notification settings - Fork 10.7k
/
TestObjectFileJSON.py
101 lines (83 loc) · 2.95 KB
/
TestObjectFileJSON.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
import json
import uuid
import os
import shutil
class TestObjectFileJSON(TestBase):
TRIPLE = "arm64-apple-macosx13.0.0"
def setUp(self):
TestBase.setUp(self)
self.source = "main.c"
def emitJSON(self, data, path):
json_object = json.dumps(data, indent=4)
json_object_file = self.getBuildArtifact("a.json")
with open(json_object_file, "w") as outfile:
outfile.write(json_object)
def toModuleSpec(self, path):
module_spec = lldb.SBModuleSpec()
module_spec.SetFileSpec(lldb.SBFileSpec(path))
return module_spec
@no_debug_info_test
def test_target(self):
triple = "arm64-apple-macosx13.0.0"
data = {
"triple": triple,
"uuid": str(uuid.uuid4()),
"type": "executable",
}
json_object_file = self.getBuildArtifact("a.json")
self.emitJSON(data, json_object_file)
target = self.dbg.CreateTarget(json_object_file)
self.assertTrue(target.IsValid())
self.assertEqual(target.GetTriple(), triple)
@no_debug_info_test
def test_module(self):
self.build()
exe = self.getBuildArtifact("a.out")
target = self.dbg.CreateTarget(exe)
data = {
"triple": target.GetTriple(),
"uuid": str(uuid.uuid4()),
}
json_object_file = self.getBuildArtifact("a.json")
self.emitJSON(data, json_object_file)
module = target.AddModule(self.toModuleSpec(json_object_file))
self.assertFalse(module.IsValid())
data = {
"triple": target.GetTriple(),
"uuid": str(uuid.uuid4()),
"type": "sharedlibrary",
"sections": [
{
"name": "__TEXT",
"type": "code",
"address": 0,
"size": 0x222,
}
],
"symbols": [
{
"name": "foo",
"address": 0x100,
"size": 0x11,
}
],
}
self.emitJSON(data, json_object_file)
module = target.AddModule(self.toModuleSpec(json_object_file))
self.assertTrue(module.IsValid())
section = module.GetSectionAtIndex(0)
self.assertTrue(section.IsValid())
self.assertEqual(section.GetName(), "__TEXT")
self.assertEqual(section.file_addr, 0x0)
self.assertEqual(section.size, 0x222)
symbol = module.FindSymbol("foo")
self.assertTrue(symbol.IsValid())
self.assertEqual(symbol.addr.GetFileAddress(), 0x100)
self.assertEqual(symbol.GetSize(), 0x11)
error = target.SetSectionLoadAddress(section, 0x1000)
self.assertSuccess(error)
self.assertEqual(symbol.addr.GetLoadAddress(target), 0x1100)