@@ -19,6 +19,7 @@ import (
19
19
"encoding/binary"
20
20
"errors"
21
21
"fmt"
22
+ "internal/saferio"
22
23
"internal/xcoff"
23
24
"io"
24
25
"io/fs"
@@ -260,12 +261,7 @@ func (x *elfExe) ReadData(addr, size uint64) ([]byte, error) {
260
261
if n > size {
261
262
n = size
262
263
}
263
- data := make ([]byte , n )
264
- _ , err := prog .ReadAt (data , int64 (addr - prog .Vaddr ))
265
- if err != nil {
266
- return nil , err
267
- }
268
- return data , nil
264
+ return saferio .ReadDataAt (prog , n , int64 (addr - prog .Vaddr ))
269
265
}
270
266
}
271
267
return nil , errUnrecognizedFormat
@@ -308,12 +304,7 @@ func (x *peExe) ReadData(addr, size uint64) ([]byte, error) {
308
304
if n > size {
309
305
n = size
310
306
}
311
- data := make ([]byte , n )
312
- _ , err := sect .ReadAt (data , int64 (addr - uint64 (sect .VirtualAddress )))
313
- if err != nil {
314
- return nil , errUnrecognizedFormat
315
- }
316
- return data , nil
307
+ return saferio .ReadDataAt (sect , n , int64 (addr - uint64 (sect .VirtualAddress )))
317
308
}
318
309
}
319
310
return nil , errUnrecognizedFormat
@@ -360,12 +351,7 @@ func (x *machoExe) ReadData(addr, size uint64) ([]byte, error) {
360
351
if n > size {
361
352
n = size
362
353
}
363
- data := make ([]byte , n )
364
- _ , err := seg .ReadAt (data , int64 (addr - seg .Addr ))
365
- if err != nil {
366
- return nil , err
367
- }
368
- return data , nil
354
+ return saferio .ReadDataAt (seg , n , int64 (addr - seg .Addr ))
369
355
}
370
356
}
371
357
return nil , errUnrecognizedFormat
@@ -401,12 +387,7 @@ func (x *xcoffExe) ReadData(addr, size uint64) ([]byte, error) {
401
387
if n > size {
402
388
n = size
403
389
}
404
- data := make ([]byte , n )
405
- _ , err := sect .ReadAt (data , int64 (addr - sect .VirtualAddress ))
406
- if err != nil {
407
- return nil , err
408
- }
409
- return data , nil
390
+ return saferio .ReadDataAt (sect , n , int64 (addr - sect .VirtualAddress ))
410
391
}
411
392
}
412
393
return nil , errors .New ("address not mapped" )
@@ -438,12 +419,7 @@ func (x *plan9objExe) ReadData(addr, size uint64) ([]byte, error) {
438
419
if n > size {
439
420
n = size
440
421
}
441
- data := make ([]byte , n )
442
- _ , err := sect .ReadAt (data , int64 (addr - uint64 (sect .Offset )))
443
- if err != nil {
444
- return nil , err
445
- }
446
- return data , nil
422
+ return saferio .ReadDataAt (sect , n , int64 (addr - uint64 (sect .Offset )))
447
423
}
448
424
}
449
425
return nil , errors .New ("address not mapped" )
0 commit comments