| 152 | |
| 153 | template <typename T> |
| 154 | void read_arr_cmd_handler(proc_rw<T> *process_rw, ADDR address, |
| 155 | size_t read_length) { |
| 156 | |
| 157 | byte *mem_buff = (byte *)malloc(sizeof(byte) * read_length); |
| 158 | errno = 0; |
| 159 | // retrieve an array of byte |
| 160 | size_t successfull_read_length = process_rw->read_mem_new( |
| 161 | (byte *)address, read_length, mem_buff, |
| 162 | Scan_Utils::E_read_mem_method::with_process_vm_readv); |
| 163 | |
| 164 | // check for some warnings/error |
| 165 | if (errno != 0) { |
| 166 | frontend_print("WARN: an error occured %s (%d)\n", strerror(errno), errno); |
| 167 | } |
| 168 | if (successfull_read_length != read_length) { |
| 169 | frontend_print("WARN: cannot read %zu bytes as requested\n", read_length); |
| 170 | frontend_print("WARN: only read %zu bytes\n", successfull_read_length); |
| 171 | } |
| 172 | |
| 173 | // print out the read memory |
| 174 | for (size_t i = 0; i < successfull_read_length; i++) { |
| 175 | frontend_print("0x%llx ", address + i); |
| 176 | frontend_print("%s\n", std::to_string(mem_buff[i]).c_str()); |
| 177 | } |
| 178 | |
| 179 | // free allocated memory |
| 180 | free(mem_buff); |
| 181 | } |
| 182 | |
| 183 | template <typename T> |
| 184 | void writeat_cmd_handler(proc_rw<T> *process_rw, ADDR address, T val_to_write) { |
nothing calls this directly
no test coverage detected