mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-03 12:38:11 +00:00
demon helper for reading cstrings
This commit is contained in:
@@ -156,3 +156,33 @@ dmn_rsp_from_thread(DMN_Handle thread)
|
|||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
//~ Memory Helpers
|
||||||
|
|
||||||
|
internal String8
|
||||||
|
dmn_process_read_cstring(Arena *arena, DMN_Handle process, U64 addr)
|
||||||
|
{
|
||||||
|
Temp scratch = scratch_begin(&arena, 1);
|
||||||
|
|
||||||
|
String8List block_list = {0};
|
||||||
|
|
||||||
|
for(U64 cursor = addr, stride = 256; ; cursor += stride)
|
||||||
|
{
|
||||||
|
U8 *raw_block = push_array_no_zero(scratch.arena, U8, stride);
|
||||||
|
U64 read_size = dmn_process_read(process, r1u64(cursor, cursor + stride), raw_block);
|
||||||
|
String8 block = str8_cstring_capped(raw_block, raw_block + read_size);
|
||||||
|
|
||||||
|
str8_list_push(scratch.arena, &block_list, block);
|
||||||
|
|
||||||
|
if(read_size != stride || (block.size+1 <= read_size && block.str[block.size] == 0))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String8 result = str8_list_join(arena, &block_list, 0);
|
||||||
|
|
||||||
|
scratch_end(scratch);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|||||||
@@ -226,6 +226,7 @@ internal U64 dmn_process_read(DMN_Handle process, Rng1U64 range, void *dst);
|
|||||||
internal B32 dmn_process_write(DMN_Handle process, Rng1U64 range, void *src);
|
internal B32 dmn_process_write(DMN_Handle process, Rng1U64 range, void *src);
|
||||||
#define dmn_process_read_struct(process, vaddr, ptr) dmn_process_read((process), r1u64((vaddr), (vaddr)+(sizeof(*ptr))), ptr)
|
#define dmn_process_read_struct(process, vaddr, ptr) dmn_process_read((process), r1u64((vaddr), (vaddr)+(sizeof(*ptr))), ptr)
|
||||||
#define dmn_process_write_struct(process, vaddr, ptr) dmn_process_write((process), r1u64((vaddr), (vaddr)+(sizeof(*ptr))), ptr)
|
#define dmn_process_write_struct(process, vaddr, ptr) dmn_process_write((process), r1u64((vaddr), (vaddr)+(sizeof(*ptr))), ptr)
|
||||||
|
internal String8 dmn_process_read_cstring(Arena *arena, DMN_Handle process, U64 addr);
|
||||||
|
|
||||||
//- rjf: threads
|
//- rjf: threads
|
||||||
internal Arch dmn_arch_from_thread(DMN_Handle handle);
|
internal Arch dmn_arch_from_thread(DMN_Handle handle);
|
||||||
|
|||||||
Reference in New Issue
Block a user