ssize_t LocalDebuggerInterface::ReadMemory(target_addr_t address, void* buffer, size_t size) { DebugContextGetter contextGetter(fDebugContextPool); return debug_read_memory(contextGetter.Context(), (const void*)(addr_t)address, buffer, size); }
//========================================================================= // DebuggerMemView //========================================================================= void DebuggerMemView::mousePressEvent(QMouseEvent* event) { const bool leftClick = event->button() == Qt::LeftButton; const bool rightClick = event->button() == Qt::RightButton; if (leftClick || rightClick) { QFontMetrics actualFont = fontMetrics(); const double fontWidth = actualFont.width(QString(100, '_')) / 100.; const int fontHeight = MAX(1, actualFont.height()); debug_view_xy topLeft = view()->visible_position(); debug_view_xy clickViewPosition; clickViewPosition.x = topLeft.x + (event->x() / fontWidth); clickViewPosition.y = topLeft.y + (event->y() / fontHeight); if (leftClick) { view()->process_click(DCK_LEFT_CLICK, clickViewPosition); } else if (rightClick) { // Display the last known PC to write to this memory location & copy it onto the clipboard debug_view_memory* memView = downcast<debug_view_memory*>(view()); const offs_t address = memView->addressAtCursorPosition(clickViewPosition); const debug_view_memory_source* source = downcast<const debug_view_memory_source*>(memView->source()); address_space* addressSpace = source->space(); const int nativeDataWidth = addressSpace->data_width() / 8; const UINT64 memValue = debug_read_memory(*addressSpace, addressSpace->address_to_byte(address), nativeDataWidth, true); const offs_t pc = source->device()->debug()->track_mem_pc_from_space_address_data(addressSpace->spacenum(), address, memValue); if (pc != (offs_t)(-1)) { // TODO: You can specify a box that the tooltip stays alive within - might be good? const QString addressAndPc = QString("Address %1 written at PC=%2").arg(address, 2, 16).arg(pc, 2, 16); QToolTip::showText(QCursor::pos(), addressAndPc, NULL); // Copy the PC into the clipboard as well QClipboard *clipboard = QApplication::clipboard(); clipboard->setText(QString("%1").arg(pc, 2, 16)); } else { QToolTip::showText(QCursor::pos(), "UNKNOWN PC", NULL); } } viewport()->update(); update(); } }
ssize_t BDebugContext::ReadMemory(const void* address, void* buffer, size_t size) { return debug_read_memory(&fContext, address, buffer, size); }