1 #------------------------------------------------------------------------------
4 # Lukas Dresel (lukas.dresel@cs.ucsb.edu)
5 # This code is in the public domain
6 #------------------------------------------------------------------------------
10 from elftools
.elf
.elffile
import ELFFile
11 from elftools
.elf
.segments
import NoteSegment
14 class TestCoreNotes(unittest
.TestCase
):
15 """ This test ensures that core dump specific notes
16 are properly analyzed. Specifically, tests for a
17 regression where MIPS PRPSINFO structures would be
18 parsed incorrectly due to being treated as 16-bit
19 fields instead of 32-bit fields.
23 cls
._core
_file
= open(os
.path
.join('test',
24 'testfiles_for_unittests', 'core_linux32_qemu_mips.elf'),
27 def test_core_prpsinfo(self
):
28 elf
= ELFFile(self
._core
_file
)
29 for segment
in elf
.iter_segments():
30 if not isinstance(segment
, NoteSegment
):
32 for note
in segment
.iter_notes():
33 if note
['n_type'] != 'NT_PRPSINFO':
36 self
.assertEqual(desc
['pr_state'], 0)
37 self
.assertEqual(desc
['pr_sname'], b
'\0')
38 self
.assertEqual(desc
['pr_zomb'], 0)
39 self
.assertEqual(desc
['pr_nice'], 0)
40 self
.assertEqual(desc
['pr_flag'], 0x0)
41 self
.assertEqual(desc
['pr_uid'], 1000)
42 self
.assertEqual(desc
['pr_gid'], 1000)
43 self
.assertEqual(desc
['pr_pid'], 449015)
44 self
.assertEqual(desc
['pr_ppid'], 4238)
45 self
.assertEqual(desc
['pr_pgrp'], 449015)
46 self
.assertEqual(desc
['pr_sid'], 4238)
49 b
'crash'.ljust(16, b
'\0'))
52 b
'./crash '.ljust(80, b
'\x00'))
55 def tearDownClass(cls
):
56 cls
._core
_file
.close()
59 if __name__
== '__main__':