From 104e521c04d1a0cad9c68fb11e250e12ad8917ef Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Wed, 17 Oct 2018 07:08:47 -0700 Subject: 4709 --- html/subx/034compute_segment_address.cc.html | 60 ++++++++++++++-------------- 1 file changed, 30 insertions(+), 30 deletions(-) (limited to 'html/subx/034compute_segment_address.cc.html') diff --git a/html/subx/034compute_segment_address.cc.html b/html/subx/034compute_segment_address.cc.html index e8820050..c180ef12 100644 --- a/html/subx/034compute_segment_address.cc.html +++ b/html/subx/034compute_segment_address.cc.html @@ -64,14 +64,14 @@ if ('onhashchange' in window) { 3 //: This gives up a measure of control in placing code and data. 4 5 :(scenario segment_name) - 6 == code - 7 05/add 0x0d0c0b0a/imm32 # add 0x0d0c0b0a to EAX + 6 == code + 7 05/add-to-EAX 0x0d0c0b0a/imm32 8 # code starts at 0x08048000 + p_offset, which is 0x54 for a single-segment binary - 9 +load: 0x08048054 -> 05 - 10 +load: 0x08048055 -> 0a - 11 +load: 0x08048056 -> 0b - 12 +load: 0x08048057 -> 0c - 13 +load: 0x08048058 -> 0d + 9 +load: 0x09000054 -> 05 + 10 +load: 0x09000055 -> 0a + 11 +load: 0x09000056 -> 0b + 12 +load: 0x09000057 -> 0c + 13 +load: 0x09000058 -> 0d 14 +run: add imm32 0x0d0c0b0a to reg EAX 15 +run: storing 0x0d0c0b0a 16 @@ -82,7 +82,7 @@ if ('onhashchange' in window) { 21 //: the new data to existing data for the segment. 22 23 :(before "End Globals") - 24 map</*name*/string, int> Segment_index; + 24 map</*name*/string, int> Segment_index; 25 bool Currently_parsing_named_segment = false; // global to permit cross-layer communication 26 int Currently_parsing_segment_index = -1; // global to permit cross-layer communication 27 :(before "End Reset") @@ -94,7 +94,7 @@ if ('onhashchange' in window) { 33 if (!starts_with(segment_title, "0x")) { 34 Currently_parsing_named_segment = true; 35 if (!contains_key(Segment_index, segment_title)) { - 36 trace(99, "parse") << "new segment '" << segment_title << "'" << end(); + 36 trace(99, "parse") << "new segment '" << segment_title << "'" << end(); 37 if (segment_title == "code") 38 put(Segment_index, segment_title, 0); 39 else if (segment_title == "data") @@ -104,7 +104,7 @@ if ('onhashchange' in window) { 43 out.segments.push_back(segment()); 44 } 45 else { - 46 trace(99, "parse") << "prepending to segment '" << segment_title << "'" << end(); + 46 trace(99, "parse") << "prepending to segment '" << segment_title << "'" << end(); 47 } 48 Currently_parsing_segment_index = get(Segment_index, segment_title); 49 } @@ -112,10 +112,10 @@ if ('onhashchange' in window) { 51 :(before "End flush(p, lines) Special-cases") 52 if (Currently_parsing_named_segment) { 53 if (p.segments.empty() || Currently_parsing_segment_index < 0) { - 54 raise << "input does not start with a '==' section header\n" << end(); + 54 raise << "input does not start with a '==' section header\n" << end(); 55 return; 56 } - 57 trace(99, "parse") << "flushing to segment" << end(); + 57 trace(99, "parse") << "flushing to segment" << end(); 58 vector<line>& curr_segment_data = p.segments.at(Currently_parsing_segment_index).lines; 59 curr_segment_data.insert(curr_segment_data.begin(), lines.begin(), lines.end()); 60 lines.clear(); @@ -125,22 +125,22 @@ if ('onhashchange' in window) { 64 } 65 66 :(scenario repeated_segment_merges_data) - 67 == code - 68 05/add 0x0d0c0b0a/imm32 # add 0x0d0c0b0a to EAX - 69 == code - 70 2d/subtract 0xddccbbaa/imm32 # subtract 0xddccbbaa from EAX + 67 == code + 68 05/add-to-EAX 0x0d0c0b0a/imm32 + 69 == code + 70 2d/subtract-from-EAX 0xddccbbaa/imm32 71 +parse: new segment 'code' 72 +parse: prepending to segment 'code' - 73 +load: 0x08048054 -> 2d - 74 +load: 0x08048055 -> aa - 75 +load: 0x08048056 -> bb - 76 +load: 0x08048057 -> cc - 77 +load: 0x08048058 -> dd - 78 +load: 0x08048059 -> 05 - 79 +load: 0x0804805a -> 0a - 80 +load: 0x0804805b -> 0b - 81 +load: 0x0804805c -> 0c - 82 +load: 0x0804805d -> 0d + 73 +load: 0x09000054 -> 2d + 74 +load: 0x09000055 -> aa + 75 +load: 0x09000056 -> bb + 76 +load: 0x09000057 -> cc + 77 +load: 0x09000058 -> dd + 78 +load: 0x09000059 -> 05 + 79 +load: 0x0900005a -> 0a + 80 +load: 0x0900005b -> 0b + 81 +load: 0x0900005c -> 0c + 82 +load: 0x0900005d -> 0d 83 84 //: compute segment address 85 @@ -149,16 +149,16 @@ if ('onhashchange' in window) { 88 89 :(code) 90 void compute_segment_starts(program& p) { - 91 trace(99, "transform") << "-- compute segment addresses" << end(); + 91 trace(99, "transform") << "-- compute segment addresses" << end(); 92 uint32_t p_offset = /*size of ehdr*/0x34 + SIZE(p.segments)*0x20/*size of each phdr*/; 93 for (size_t i = 0; i < p.segments.size(); ++i) { 94 segment& curr = p.segments.at(i); 95 if (curr.start == 0) { - 96 curr.start = CODE_START + i*SEGMENT_SIZE + p_offset; - 97 trace(99, "transform") << "segment " << i << " begins at address 0x" << HEXWORD << curr.start << end(); + 96 curr.start = CODE_SEGMENT + i*SPACE_FOR_SEGMENT + p_offset; + 97 trace(99, "transform") << "segment " << i << " begins at address 0x" << HEXWORD << curr.start << end(); 98 } 99 p_offset += size_of(curr); -100 assert(p_offset < SEGMENT_SIZE); // for now we get less and less available space in each successive segment +100 assert(p_offset < INITIAL_SEGMENT_SIZE); // for now we get less and less available space in each successive segment 101 } 102 } 103 -- cgit 1.4.1-2-gfad0