| 8 | |
| 9 | |
| 10 | SegmentsWidget::SegmentsWidget(QWidget* parent, BinaryViewRef data) : QWidget(parent) |
| 11 | { |
| 12 | QGridLayout* layout = new QGridLayout(); |
| 13 | layout->setContentsMargins(0, 0, 0, 0); |
| 14 | layout->setVerticalSpacing(1); |
| 15 | layout->setHorizontalSpacing(UIContext::getScaledWindowSize(16, 16).width()); |
| 16 | |
| 17 | for (auto& segment : data->GetSegments()) |
| 18 | if ((segment->GetFlags() & (SegmentReadable | SegmentWritable | SegmentExecutable)) != 0) |
| 19 | m_segments.push_back(segment); |
| 20 | sort(m_segments.begin(), m_segments.end(), |
| 21 | [&](SegmentRef a, SegmentRef b) { return a->GetStart() < b->GetStart(); }); |
| 22 | |
| 23 | int row = 0; |
| 24 | for (auto& segment : m_segments) |
| 25 | { |
| 26 | QString begin = QString("0x") + QString::number(segment->GetStart(), 16); |
| 27 | QString end = QString("0x") + QString::number(segment->GetEnd(), 16); |
| 28 | |
| 29 | QString permissions; |
| 30 | if (segment->GetFlags() & SegmentReadable) |
| 31 | permissions += "r"; |
| 32 | else |
| 33 | permissions += "-"; |
| 34 | if (segment->GetFlags() & SegmentWritable) |
| 35 | permissions += "w"; |
| 36 | else |
| 37 | permissions += "-"; |
| 38 | if (segment->GetFlags() & SegmentExecutable) |
| 39 | permissions += "x"; |
| 40 | else |
| 41 | permissions += "-"; |
| 42 | |
| 43 | QHBoxLayout* rangeLayout = new QHBoxLayout(); |
| 44 | rangeLayout->setContentsMargins(0, 0, 0, 0); |
| 45 | NavigationAddressLabel* beginLabel = new NavigationAddressLabel(begin); |
| 46 | QLabel* dashLabel = new QLabel("-"); |
| 47 | dashLabel->setFont(getMonospaceFont(this)); |
| 48 | NavigationAddressLabel* endLabel = new NavigationAddressLabel(end); |
| 49 | rangeLayout->addWidget(beginLabel); |
| 50 | rangeLayout->addWidget(dashLabel); |
| 51 | rangeLayout->addWidget(endLabel); |
| 52 | layout->addLayout(rangeLayout, row, 0); |
| 53 | |
| 54 | QLabel* permissionsLabel = new QLabel(permissions); |
| 55 | permissionsLabel->setFont(getMonospaceFont(this)); |
| 56 | layout->addWidget(permissionsLabel, row, 1); |
| 57 | |
| 58 | row++; |
| 59 | } |
| 60 | |
| 61 | layout->setColumnStretch(2, 1); |
| 62 | setLayout(layout); |
| 63 | } |
| 64 | |
| 65 | |
| 66 | SectionsWidget::SectionsWidget(QWidget* parent, BinaryViewRef data) : QWidget(parent) |