2015-07-09 17:30:37 +02:00
|
|
|
#include "stdafx.h"
|
2018-09-29 00:12:00 +02:00
|
|
|
#include "sys_dbg.h"
|
2015-07-09 17:30:37 +02:00
|
|
|
|
2016-04-14 00:23:53 +02:00
|
|
|
#include "Emu/Cell/ErrorCodes.h"
|
2018-07-09 22:30:28 +02:00
|
|
|
#include "Emu/Cell/Modules/sys_lv2dbg.h"
|
2015-07-09 17:30:37 +02:00
|
|
|
|
2018-08-25 14:39:00 +02:00
|
|
|
LOG_CHANNEL(sys_dbg);
|
2018-02-09 15:49:37 +01:00
|
|
|
|
2018-07-09 22:30:28 +02:00
|
|
|
error_code sys_dbg_read_process_memory(s32 pid, u32 address, u32 size, vm::ptr<void> data)
|
|
|
|
|
{
|
|
|
|
|
sys_dbg.warning("sys_dbg_read_process_memory(pid=0x%x, address=0x%llx, size=0x%x, data=*0x%x)", pid, address, size, data);
|
2016-08-19 23:14:10 +02:00
|
|
|
|
2018-07-09 22:30:28 +02:00
|
|
|
// Todo(TGEnigma): Process lookup (only 1 process exists right now)
|
|
|
|
|
if (pid != 1)
|
|
|
|
|
{
|
|
|
|
|
return CELL_LV2DBG_ERROR_DEINVALIDARGUMENTS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!size || !data)
|
|
|
|
|
{
|
|
|
|
|
return CELL_LV2DBG_ERROR_DEINVALIDARGUMENTS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if data destination is writable
|
2020-11-10 18:09:28 +01:00
|
|
|
if (!vm::check_addr(data.addr(), vm::page_writable, size))
|
2018-07-09 22:30:28 +02:00
|
|
|
{
|
|
|
|
|
return CELL_EFAULT;
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-27 22:04:10 +02:00
|
|
|
std::memcpy(data.get_ptr(), vm::get_super_ptr(address), size);
|
2018-07-09 22:30:28 +02:00
|
|
|
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
error_code sys_dbg_write_process_memory(s32 pid, u32 address, u32 size, vm::cptr<void> data)
|
|
|
|
|
{
|
|
|
|
|
sys_dbg.warning("sys_dbg_write_process_memory(pid=0x%x, address=0x%llx, size=0x%x, data=*0x%x)", pid, address, size, data);
|
|
|
|
|
|
|
|
|
|
// Todo(TGEnigma): Process lookup (only 1 process exists right now)
|
|
|
|
|
if (pid != 1)
|
|
|
|
|
{
|
|
|
|
|
return CELL_LV2DBG_ERROR_DEINVALIDARGUMENTS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!size || !data)
|
|
|
|
|
{
|
|
|
|
|
return CELL_LV2DBG_ERROR_DEINVALIDARGUMENTS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if data source is readable
|
2020-11-10 18:09:28 +01:00
|
|
|
if (!vm::check_addr(data.addr(), vm::page_readable, size))
|
2018-07-09 22:30:28 +02:00
|
|
|
{
|
|
|
|
|
return CELL_EFAULT;
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-27 22:04:10 +02:00
|
|
|
std::memcpy(vm::get_super_ptr(address), data.get_ptr(), size);
|
2018-07-09 22:30:28 +02:00
|
|
|
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|