@@ -24,7 +24,12 @@ namespace MemoryCommands {
2424 while (remainder > 0 ) {
2525 u64 receive = remainder > MAX_LINE_LENGTH ? MAX_LINE_LENGTH : remainder;
2626 remainder -= receive;
27- readMem (buffer, offset + total, receive);
27+ Result rc = readMem (buffer, offset + total, receive);
28+ if (R_FAILED (rc)) {
29+ Logger::instance ().log (" peek() readMem() failed. Offset=" + std::to_string (offset + total) + " , Size=" + std::to_string (receive), std::to_string (R_DESCRIPTION (rc)));
30+ buffer.assign (size, 0 );
31+ break ;
32+ }
2833 total += receive;
2934 }
3035
@@ -50,7 +55,12 @@ namespace MemoryCommands {
5055 buffer.resize (totalSize * sizeof (u8 ));
5156 int count = (int )offsets.size ();
5257 for (int i = 0 ; i < count; i++) {
53- readMem (buffer, offsets[i], sizes[i], ofs);
58+ Result rc = readMem (buffer, offsets[i], sizes[i], ofs);
59+ if (R_FAILED (rc)) {
60+ Logger::instance ().log (" peekMulti() readMem() failed. Offset=" + std::to_string (offsets[i]) + " , Size=" + std::to_string (sizes[i]), std::to_string (R_DESCRIPTION (rc)));
61+ buffer.assign (totalSize * sizeof (u8 ), 0 );
62+ break ;
63+ }
5464 ofs += sizes[i];
5565 }
5666
@@ -81,12 +91,21 @@ namespace MemoryCommands {
8191 u64 size = sizeof (u64 );
8292 buffer.resize (size);
8393
84- readMem (buffer, m_metaData.main_nso_base + main, size);
85- std::memcpy (&offset, buffer.data (), size);
94+ Result rc = readMem (buffer, m_metaData.main_nso_base + main, size);
95+ if (R_FAILED (rc)) {
96+ Logger::instance ().log (" followMainPointer() initial readMem() failed. Main=" + std::to_string (main), std::to_string (R_DESCRIPTION (rc)));
97+ return 0 ;
98+ }
8699
100+ std::memcpy (&offset, buffer.data (), size);
87101 int count = (int )jumps.size ();
88102 for (int i = 0 ; i < count; i++) {
89- readMem (buffer, offset + jumps[i], size);
103+ rc = readMem (buffer, offset + jumps[i], size);
104+ if (R_FAILED (rc)) {
105+ Logger::instance ().log (" followMainPointer() readMem() failed. Offset=" + std::to_string (offset) + " , Jump=" + std::to_string (jumps[i]), std::to_string (R_DESCRIPTION (rc)));
106+ return 0 ;
107+ }
108+
90109 std::memcpy (&offset, buffer.data (), size);
91110 if (offset == 0 ) {
92111 break ;
@@ -103,13 +122,11 @@ namespace MemoryCommands {
103122 * @param The number of bytes to read.
104123 * @param Offset into the buffer for multi-read (default 0).
105124 */
106- void Vision::readMem (const std::vector<char >& buffer, u64 offset, u64 size, u64 multi) {
125+ Result Vision::readMem (const std::vector<char >& buffer, u64 offset, u64 size, u64 multi) {
107126 attach ();
108127 Result rc = svcReadDebugProcessMemory ((void *)(buffer.data () + multi), m_debugHandle, offset, size);
109- if (R_FAILED (rc)) {
110- Logger::instance ().log (" readMem() svcReadDebugProcessMemory() failed. Offset=" + std::to_string (offset) + " , Size=" + std::to_string (size), std::to_string (R_DESCRIPTION (rc)));
111- }
112128 detach ();
129+ return rc;
113130 }
114131
115132 /* *
0 commit comments