Skip to content
Snippets Groups Projects
Commit dc336f15 authored by Terraneo Federico's avatar Terraneo Federico
Browse files

Added checks to mx-postlinker and adapted it to work on 32 and 64bit hosts

parent 9db72c4e
Branches
Tags
No related merge requests found
......@@ -33,7 +33,7 @@ all: $(OBJ) crt0.o
@xxd -i main.elf | sed 's/unsigned char/const unsigned char __attribute__((aligned(8)))/' > prog3.h
clean:
-rm $(OBJ) crt0.o main.elf main.map main.txt prog3.h $(OBJ:.o=.d)
-rm $(OBJ) crt0.o main.elf main.map main.txt $(OBJ:.o=.d)
%.o: %.s
$(AS) $(AFLAGS) $< -o $@
......
main.elf: file format elf32-littlearm
main.elf
architecture: arm, flags 0x00000050:
HAS_SYMS, DYNAMIC
start address 0x00000099
Program Header:
LOAD off 0x00000098 vaddr 0x00000098 paddr 0x00000098 align 2**3
filesz 0x000001f2 memsz 0x000001f2 flags r-x
LOAD off 0x00000290 vaddr 0x10000000 paddr 0x10000000 align 2**3
filesz 0x00000110 memsz 0x00000110 flags rw-
DYNAMIC off 0x0000029c vaddr 0x1000000c paddr 0x1000000c align 2**2
filesz 0x00000028 memsz 0x00000028 flags rw-
Dynamic Section:
DEBUG 0x00000000
private flags = 5000002: [Version5 EABI] [has entry point]
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000001f2 00000098 00000098 00000098 2**3
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .got 0000000c 10000000 10000000 00000290 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .dynamic 00000028 1000000c 1000000c 0000029c 2**2
CONTENTS, ALLOC, LOAD, DATA
3 .rodata 000000d8 10000038 10000038 000002c8 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
SYMBOL TABLE:
00000098 l d .text 00000000 .text
10000000 l d .got 00000000 .got
1000000c l d .dynamic 00000000 .dynamic
10000038 l d .rodata 00000000 .rodata
00000000 l df *ABS* 00000000 main.c
10000038 l O .rodata 00000051 str.3095
1000008c l O .rodata 0000001b okMsg.3097
100000a8 l O .rodata 00000014 str2.3096
1000000c l O *ABS* 00000000 _DYNAMIC
10000000 l O *ABS* 00000000 _GLOBAL_OFFSET_TABLE_
00000284 g F .text 00000000 usleep
00000272 g F .text 00000000 system
00000278 g F .text 00000000 write
00000098 g F .text 00000000 _start
0000027e g F .text 00000000 read
000000a0 g F .text 000001bc main
0000026c g F .text 00000000 seek
0000025c g F .text 00000000 _exit
00000260 g F .text 00000000 open
00000266 g F .text 00000000 close
Contents of section .text:
0098 00f002f8 00f0def8 2de9f04d dff89081 ........-..M....
00a8 644fdff8 94a1dff8 94b19cb0 644d03ae dO..........dM..
00b8 c8444f44 ca44cb44 09eb0503 002213f8 .DOD.D.D....."..
00c8 014f0132 002cfad1 09eb0501 012000f0 .O.2.,....... ..
00d8 cff86422 20463146 00f0cdf8 0028ebdd ..d" F1F.....(..
00e8 9df80c30 303b062b 75d8dfe8 03f06d66 ...00;.+u.....mf
00f8 62605a08 04004046 00f0b7f8 dce70022 b`Z...@F......."
0108 384640f2 024100f0 a7f8b0f1 ff3f0446 8F@..A.......?.F
0118 d2d00c22 01205146 00f0aaf8 04222046 ...". QF....." F
0128 594600f0 a5f80428 65d00021 01910021 YF.....(e..!...!
0138 0a462046 00f096f8 42490322 20464944 .F F....BI." FID
0148 00f096f8 03286ad0 00221146 204600f0 .....(j..".F F..
0158 89f86422 20463146 00f08df8 042853d0 ..d" F1F.....(S.
0168 204600f0 7cf80446 0028a5d1 36490120 F..|..F.(..6I.
0178 49440922 00f07cf8 019941f0 0403072b ID."..|...A....+
0188 9ad109eb 05035433 224613f8 011f0132 ......T3"F.....2
0198 0029fad1 09eb0501 54310120 00f068f8 .)......T1. ..h.
01a8 8ae74ff0 40431868 00f068f8 84e700be ..O.@C.h..h.....
01b8 82e70020 1cb0bde8 f08d44f6 4030c0f2 ... ......D.@0..
01c8 4c0000f0 5bf877e7 00230a20 90fbf3f0 L...[.w..#. ....
01d8 00f054f8 70e709eb 05037033 002213f8 ..T.p.....p3."..
01e8 011f0132 0029fad1 09eb0501 70310120 ...2.)......p1.
01f8 00f03ef8 60e71549 01204944 092200f0 ..>.`..I. ID."..
0208 37f80123 019392e7 11490120 49440822 7..#.....I. ID."
0218 00f02ef8 019b43f0 02030193 a0e70b49 ......C........I
0228 09220120 494400f0 23f80122 01928be7 .". ID..#.."....
0238 08010000 bc000000 c8000000 d8000000 ................
0248 38000000 ec000000 fc000000 e0000000 8...............
0258 f0000000 022300df 062300df 70470723 .....#...#..pG.#
0268 00df7047 082300df 70470923 00df7047 ..pG.#..pG.#..pG
0278 032300df 70470423 00df7047 052300df .#..pG.#..pG.#..
0288 7047 pG
Contents of section .got:
10000000 0c000010 00000000 00000000 ............
Contents of section .dynamic:
1000000c 15000000 00000000 00000000 00000000 ................
1000001c 00000000 00000000 00000000 00000000 ................
1000002c 00000000 00000000 ........
Contents of section .rodata:
10000038 54657374 20617070 6c696361 74696f6e Test application
10000048 3a0a303d 6469767a 65726f0a 313d736c :.0=divzero.1=sl
10000058 65657020 35730a32 3d657869 740a333d eep 5s.2=exit.3=
10000068 626b7074 0a343d64 616e676c 696e670a bkpt.4=dangling.
10000078 353d6f70 656e0a36 3d737973 74656d0a 5=open.6=system.
10000088 00000000 45766572 79746869 6e672773 ....Everything's
10000098 20736869 6e792c20 43617027 6e0a0000 shiny, Cap'n...
100000a8 556e6578 70656374 65642063 6f6d6d61 Unexpected comma
100000b8 6e640a00 2f746573 742e7478 74000000 nd../test.txt...
100000c8 46696c65 206f7065 6e65640a 00000000 File opened.....
100000d8 6369616f 00000000 57726974 65206f6b ciao....Write ok
100000e8 0a000000 31323300 52656164 206f6b0a ....123.Read ok.
100000f8 00000000 436c6f73 65206f6b 0a000000 ....Close ok....
10000108 74657374 00000000 test....
Disassembly of section .text:
00000098 <_start>:
_start():
98: f000 f802 bl a0 <main>
9c: f000 f8de bl 25c <_exit>
000000a0 <main>:
main():
a0: e92d 4df0 stmdb sp!, {r4, r5, r6, r7, r8, sl, fp, lr}
a4: f8df 8190 ldr.w r8, [pc, #400] ; 238 <main+0x198>
a8: 4f64 ldr r7, [pc, #400] ; (23c <main+0x19c>)
aa: f8df a194 ldr.w sl, [pc, #404] ; 240 <main+0x1a0>
ae: f8df b194 ldr.w fp, [pc, #404] ; 244 <main+0x1a4>
b2: b09c sub sp, #112 ; 0x70
b4: 4d64 ldr r5, [pc, #400] ; (248 <main+0x1a8>)
b6: ae03 add r6, sp, #12
b8: 44c8 add r8, r9
ba: 444f add r7, r9
bc: 44ca add sl, r9
be: 44cb add fp, r9
c0: eb09 0305 add.w r3, r9, r5
c4: 2200 movs r2, #0
c6: f813 4f01 ldrb.w r4, [r3, #1]!
ca: 3201 adds r2, #1
cc: 2c00 cmp r4, #0
ce: d1fa bne.n c6 <main+0x26>
d0: eb09 0105 add.w r1, r9, r5
d4: 2001 movs r0, #1
d6: f000 f8cf bl 278 <write>
da: 2264 movs r2, #100 ; 0x64
dc: 4620 mov r0, r4
de: 4631 mov r1, r6
e0: f000 f8cd bl 27e <read>
e4: 2800 cmp r0, #0
e6: ddeb ble.n c0 <main+0x20>
e8: f89d 300c ldrb.w r3, [sp, #12]
ec: 3b30 subs r3, #48 ; 0x30
ee: 2b06 cmp r3, #6
f0: d875 bhi.n 1de <main+0x13e>
f2: e8df f003 tbb [pc, r3]
f6: 6062666d rsbvs r6, r2, sp, ror #12
fa: 0004085a andeq r0, r4, sl, asr r8
fe: 4640 mov r0, r8
100: f000 f8b7 bl 272 <system>
104: e7dc b.n c0 <main+0x20>
106: 2200 movs r2, #0
108: 4638 mov r0, r7
10a: f240 4102 movw r1, #1026 ; 0x402
10e: f000 f8a7 bl 260 <open>
112: f1b0 3fff cmp.w r0, #4294967295 ; 0xffffffff
116: 4604 mov r4, r0
118: d0d2 beq.n c0 <main+0x20>
11a: 220c movs r2, #12
11c: 2001 movs r0, #1
11e: 4651 mov r1, sl
120: f000 f8aa bl 278 <write>
124: 2204 movs r2, #4
126: 4620 mov r0, r4
128: 4659 mov r1, fp
12a: f000 f8a5 bl 278 <write>
12e: 2804 cmp r0, #4
130: d065 beq.n 1fe <main+0x15e>
132: 2100 movs r1, #0
134: 9101 str r1, [sp, #4]
136: 2100 movs r1, #0
138: 460a mov r2, r1
13a: 4620 mov r0, r4
13c: f000 f896 bl 26c <seek>
140: 4942 ldr r1, [pc, #264] ; (24c <main+0x1ac>)
142: 2203 movs r2, #3
144: 4620 mov r0, r4
146: 4449 add r1, r9
148: f000 f896 bl 278 <write>
14c: 2803 cmp r0, #3
14e: d06a beq.n 226 <main+0x186>
150: 2200 movs r2, #0
152: 4611 mov r1, r2
154: 4620 mov r0, r4
156: f000 f889 bl 26c <seek>
15a: 2264 movs r2, #100 ; 0x64
15c: 4620 mov r0, r4
15e: 4631 mov r1, r6
160: f000 f88d bl 27e <read>
164: 2804 cmp r0, #4
166: d053 beq.n 210 <main+0x170>
168: 4620 mov r0, r4
16a: f000 f87c bl 266 <close>
16e: 4604 mov r4, r0
170: 2800 cmp r0, #0
172: d1a5 bne.n c0 <main+0x20>
174: 4936 ldr r1, [pc, #216] ; (250 <main+0x1b0>)
176: 2001 movs r0, #1
178: 4449 add r1, r9
17a: 2209 movs r2, #9
17c: f000 f87c bl 278 <write>
180: 9901 ldr r1, [sp, #4]
182: f041 0304 orr.w r3, r1, #4
186: 2b07 cmp r3, #7
188: d19a bne.n c0 <main+0x20>
18a: eb09 0305 add.w r3, r9, r5
18e: 3354 adds r3, #84 ; 0x54
190: 4622 mov r2, r4
192: f813 1f01 ldrb.w r1, [r3, #1]!
196: 3201 adds r2, #1
198: 2900 cmp r1, #0
19a: d1fa bne.n 192 <main+0xf2>
19c: eb09 0105 add.w r1, r9, r5
1a0: 3154 adds r1, #84 ; 0x54
1a2: 2001 movs r0, #1
1a4: f000 f868 bl 278 <write>
1a8: e78a b.n c0 <main+0x20>
1aa: f04f 4340 mov.w r3, #3221225472 ; 0xc0000000
1ae: 6818 ldr r0, [r3, #0]
1b0: f000 f868 bl 284 <usleep>
1b4: e784 b.n c0 <main+0x20>
1b6: be00 bkpt 0x0000
1b8: e782 b.n c0 <main+0x20>
1ba: 2000 movs r0, #0
1bc: b01c add sp, #112 ; 0x70
1be: e8bd 8df0 ldmia.w sp!, {r4, r5, r6, r7, r8, sl, fp, pc}
1c2: f644 3040 movw r0, #19264 ; 0x4b40
1c6: f2c0 004c movt r0, #76 ; 0x4c
1ca: f000 f85b bl 284 <usleep>
1ce: e777 b.n c0 <main+0x20>
1d0: 2300 movs r3, #0
1d2: 200a movs r0, #10
1d4: fb90 f0f3 sdiv r0, r0, r3
1d8: f000 f854 bl 284 <usleep>
1dc: e770 b.n c0 <main+0x20>
1de: eb09 0305 add.w r3, r9, r5
1e2: 3370 adds r3, #112 ; 0x70
1e4: 2200 movs r2, #0
1e6: f813 1f01 ldrb.w r1, [r3, #1]!
1ea: 3201 adds r2, #1
1ec: 2900 cmp r1, #0
1ee: d1fa bne.n 1e6 <main+0x146>
1f0: eb09 0105 add.w r1, r9, r5
1f4: 3170 adds r1, #112 ; 0x70
1f6: 2001 movs r0, #1
1f8: f000 f83e bl 278 <write>
1fc: e760 b.n c0 <main+0x20>
1fe: 4915 ldr r1, [pc, #84] ; (254 <main+0x1b4>)
200: 2001 movs r0, #1
202: 4449 add r1, r9
204: 2209 movs r2, #9
206: f000 f837 bl 278 <write>
20a: 2301 movs r3, #1
20c: 9301 str r3, [sp, #4]
20e: e792 b.n 136 <main+0x96>
210: 4911 ldr r1, [pc, #68] ; (258 <main+0x1b8>)
212: 2001 movs r0, #1
214: 4449 add r1, r9
216: 2208 movs r2, #8
218: f000 f82e bl 278 <write>
21c: 9b01 ldr r3, [sp, #4]
21e: f043 0302 orr.w r3, r3, #2
222: 9301 str r3, [sp, #4]
224: e7a0 b.n 168 <main+0xc8>
226: 490b ldr r1, [pc, #44] ; (254 <main+0x1b4>)
228: 2209 movs r2, #9
22a: 2001 movs r0, #1
22c: 4449 add r1, r9
22e: f000 f823 bl 278 <write>
232: 2201 movs r2, #1
234: 9201 str r2, [sp, #4]
236: e78b b.n 150 <main+0xb0>
238: 00000108 andeq r0, r0, r8, lsl #2
23c: 000000bc strheq r0, [r0], -ip
240: 000000c8 andeq r0, r0, r8, asr #1
244: 000000d8 ldrdeq r0, [r0], -r8
248: 00000038 andeq r0, r0, r8, lsr r0
24c: 000000ec andeq r0, r0, ip, ror #1
250: 000000fc strdeq r0, [r0], -ip
254: 000000e0 andeq r0, r0, r0, ror #1
258: 000000f0 strdeq r0, [r0], -r0 ; <UNPREDICTABLE>
0000025c <_exit>:
_exit():
25c: 2302 movs r3, #2
25e: df00 svc 0
00000260 <open>:
open():
260: 2306 movs r3, #6
262: df00 svc 0
264: 4770 bx lr
00000266 <close>:
close():
266: 2307 movs r3, #7
268: df00 svc 0
26a: 4770 bx lr
0000026c <seek>:
seek():
26c: 2308 movs r3, #8
26e: df00 svc 0
270: 4770 bx lr
00000272 <system>:
system():
272: 2309 movs r3, #9
274: df00 svc 0
276: 4770 bx lr
00000278 <write>:
write():
278: 2303 movs r3, #3
27a: df00 svc 0
27c: 4770 bx lr
0000027e <read>:
read():
27e: 2304 movs r3, #4
280: df00 svc 0
282: 4770 bx lr
00000284 <usleep>:
usleep():
284: 2305 movs r3, #5
286: df00 svc 0
288: 4770 bx lr
Disassembly of section .got:
10000000 <.got>:
10000000: 1000000c andne r0, r0, ip
...
Disassembly of section .dynamic:
1000000c <.dynamic>:
1000000c: 00000015 andeq r0, r0, r5, lsl r0
...
Disassembly of section .rodata:
10000038 <str.3095>:
10000038: 74736554 ldrbtvc r6, [r3], #-1364 ; 0x554
1000003c: 70706120 rsbsvc r6, r0, r0, lsr #2
10000040: 6163696c cmnvs r3, ip, ror #18
10000044: 6e6f6974 mcrvs 9, 3, r6, cr15, cr4, {3}
10000048: 3d300a3a vldmdbcc r0!, {s0-s57}
1000004c: 7a766964 bvc 11d9a5e4 <str2.3096+0x1d9a53c>
10000050: 0a6f7265 beq 11bdc9ec <str2.3096+0x1bdc944>
10000054: 6c733d31 ldclvs 13, cr3, [r3], #-196 ; 0xffffff3c
10000058: 20706565 rsbscs r6, r0, r5, ror #10
1000005c: 320a7335 andcc r7, sl, #-738197504 ; 0xd4000000
10000060: 6978653d ldmdbvs r8!, {r0, r2, r3, r4, r5, r8, sl, sp, lr}^
10000064: 3d330a74 vldmdbcc r3!, {s0-s115}
10000068: 74706b62 ldrbtvc r6, [r0], #-2914 ; 0xb62
1000006c: 643d340a ldrtvs r3, [sp], #-1034 ; 0x40a
10000070: 6c676e61 stclvs 14, cr6, [r7], #-388 ; 0xfffffe7c
10000074: 0a676e69 beq 119dba20 <str2.3096+0x19db978>
10000078: 706f3d35 rsbvc r3, pc, r5, lsr sp ; <UNPREDICTABLE>
1000007c: 360a6e65 strcc r6, [sl], -r5, ror #28
10000080: 7379733d cmnvc r9, #-201326592 ; 0xf4000000
10000084: 0a6d6574 beq 11b5965c <str2.3096+0x1b595b4>
10000088: 00000000 andeq r0, r0, r0
1000008c <okMsg.3097>:
1000008c: 72657645 rsbvc r7, r5, #72351744 ; 0x4500000
10000090: 69687479 stmdbvs r8!, {r0, r3, r4, r5, r6, sl, ip, sp, lr}^
10000094: 7327676e teqvc r7, #28835840 ; 0x1b80000
10000098: 69687320 stmdbvs r8!, {r5, r8, r9, ip, sp, lr}^
1000009c: 202c796e eorcs r7, ip, lr, ror #18
100000a0: 27706143 ldrbcs r6, [r0, -r3, asr #2]!
100000a4: 00000a6e andeq r0, r0, lr, ror #20
100000a8 <str2.3096>:
100000a8: 78656e55 stmdavc r5!, {r0, r2, r4, r6, r9, sl, fp, sp, lr}^
100000ac: 74636570 strbtvc r6, [r3], #-1392 ; 0x570
100000b0: 63206465 teqvs r0, #1694498816 ; 0x65000000
100000b4: 616d6d6f cmnvs sp, pc, ror #26
100000b8: 000a646e andeq r6, sl, lr, ror #8
100000bc: 7365742f cmnvc r5, #788529152 ; 0x2f000000
100000c0: 78742e74 ldmdavc r4!, {r2, r4, r5, r6, r9, sl, fp, sp}^
100000c4: 00000074 andeq r0, r0, r4, ror r0
100000c8: 656c6946 strbvs r6, [ip, #-2374]! ; 0x946
100000cc: 65706f20 ldrbvs r6, [r0, #-3872]! ; 0xf20
100000d0: 0a64656e beq 11919690 <str2.3096+0x19195e8>
100000d4: 00000000 andeq r0, r0, r0
100000d8: 6f616963 svcvs 0x00616963
100000dc: 00000000 andeq r0, r0, r0
100000e0: 74697257 strbtvc r7, [r9], #-599 ; 0x257
100000e4: 6b6f2065 blvs 11bc8280 <str2.3096+0x1bc81d8>
100000e8: 0000000a andeq r0, r0, sl
100000ec: 00333231 eorseq r3, r3, r1, lsr r2
100000f0: 64616552 strbtvs r6, [r1], #-1362 ; 0x552
100000f4: 0a6b6f20 beq 11adbd7c <str2.3096+0x1adbcd4>
100000f8: 00000000 andeq r0, r0, r0
100000fc: 736f6c43 cmnvc pc, #17152 ; 0x4300
10000100: 6b6f2065 blvs 11bc829c <str2.3096+0x1bc81f4>
10000104: 0000000a andeq r0, r0, sl
10000108: 74736574 ldrbtvc r6, [r3], #-1396 ; 0x574
1000010c: 00000000 andeq r0, r0, r0
CXX:= g++ -m32
CXX:= g++
CXXFLAGS:= -O2 -c
OBJS:= postlinker.o main.o
DFLAGS:= -MMD -MP
......
......@@ -16,7 +16,6 @@
***************************************************************************/
#include "postlinker.h"
#include <stdexcept>
using namespace std;
......@@ -29,12 +28,12 @@ PostLinker::PostLinker(string s)
size=f.tellg();
newSize=size;
f.seekg(0,ios::beg);
int roundedSize=(size+sizeof(int)-1) & ~(sizeof(int)-1);
elf=new int[roundedSize/sizeof(int)];
int roundedSize=(size+sizeof(Elf32_Word)-1) & ~(sizeof(Elf32_Word)-1);
elf=new Elf32_Word[roundedSize/sizeof(Elf32_Word)];
memset(elf,0,roundedSize);
f.read(reinterpret_cast<char*>(elf),size);
static const char magic[EI_NIDENT]={0x7f,'E','L','F',1,1,1};
if(memcmp(getElfHeader()->e_ident,magic,EI_NIDENT))
if(size<sizeof(Elf32_Ehdr) || memcmp(getElfHeader()->e_ident,magic,EI_NIDENT))
throw runtime_error("Unrecognized format");
}
......@@ -93,8 +92,11 @@ pair<Elf32_Dyn *,Elf32_Word> PostLinker::getDynamic()
{
Elf32_Phdr* phdr=getElfSegment(i);
if(phdr->p_type!=PT_DYNAMIC) continue;
unsigned int base=reinterpret_cast<unsigned int>(elf);
return make_pair(reinterpret_cast<Elf32_Dyn*>(base+phdr->p_offset),
unsigned char *base=reinterpret_cast<unsigned char*>(elf);
unsigned int offset=phdr->p_offset;
if(offset+phdr->p_memsz>size)
throw std::runtime_error("Dynamic outside file bounds");
return make_pair(reinterpret_cast<Elf32_Dyn*>(base+offset),
phdr->p_memsz/sizeof(Elf32_Dyn));
}
throw runtime_error("Dynamic not found");
......@@ -109,7 +111,7 @@ int PostLinker::getSizeOfDataAndBss()
if(!(phdr->p_flags & PF_W) || (phdr->p_flags & PF_X)) continue;
return phdr->p_memsz;
}
throw runtime_error("Dynamic not found");
throw runtime_error(".data/.bss not found");
}
PostLinker::~PostLinker()
......
......@@ -22,6 +22,7 @@
#include <cstring>
#include <iostream>
#include <exception>
#include <stdexcept>
#include <utility>
#include <cstdlib>
#include <fstream>
......@@ -84,9 +85,11 @@ private:
*/
Elf32_Shdr* getElfSection(int index)
{
unsigned int base=reinterpret_cast<unsigned int>(elf);
return reinterpret_cast<Elf32_Shdr*>(base+getElfHeader()->
e_shoff+index*sizeof(Elf32_Shdr));
unsigned char *base=reinterpret_cast<unsigned char*>(elf);
unsigned int offset=getElfHeader()->e_shoff+index*sizeof(Elf32_Shdr);
if(offset+sizeof(Elf32_Shdr)>size)
throw std::runtime_error("Elf section outside file bounds");
return reinterpret_cast<Elf32_Shdr*>(base+offset);
}
/**
......@@ -96,9 +99,11 @@ private:
*/
Elf32_Phdr *getElfSegment(int index)
{
unsigned int base=reinterpret_cast<unsigned int>(elf);
return reinterpret_cast<Elf32_Phdr*>(base+getElfHeader()->e_phoff+
index*sizeof(Elf32_Phdr));
unsigned char *base=reinterpret_cast<unsigned char*>(elf);
unsigned int offset=getElfHeader()->e_phoff+index*sizeof(Elf32_Phdr);
if(offset+sizeof(Elf32_Phdr)>size)
throw std::runtime_error("Elf segment outside file bounds");
return reinterpret_cast<Elf32_Phdr*>(base+offset);
}
/**
......@@ -113,7 +118,7 @@ private:
*/
std::pair<Elf32_Dyn *,Elf32_Word> getDynamic();
int* elf;
Elf32_Word* elf;
int size;
int newSize;
std::string elfFile;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment