Address

ReGenny parses addresses in a few different ways. Here you can find some examples.

For these examples, I'm going to be using numbers in the hexidecimal format (base 16), but decimal numbers (base 10) are also supported.

Absolute addresses

Inputting an absolute address will display whatever is at that address in the current virtual address space.

For example, on Windows if your process is based at 0x180000000, then you can input the address 0x180000000 to see the PE (MZ) header and 0x180001000 to see the start of code (or whatever else is after the PE header, assuming the PE header is 0x1000 bytes in size).

Relative addresses

Relative addresses can also be used. The syntax looks something like this: <module_name>+offset->offset->offset.

Module names can contain full paths or partial paths, as long as it ends with the input path. For example, say we want to get the base address of a module loaded as C:\Windows\System32\kernel32.dll, we could do one of the following:

  • <kernel32.dll>+0x0 (Partial ending)
  • <System32\kernel32.dll> (Partial ending)
  • <C:\Windows\System32\kernel32.dll>+0x0 (Full path)

On Windows, Addresses are relative to a loaded DLL's (Dynamic-Link Library) name or EXE (Executable) name of the attached app (basically, any loaded module, including itself).

For example, to get the start of code, after the PE header, you can enter something like: <app.exe>+0x1000.

It also supports dereferencing (denoted by ->), like so: <app.exe>+0x5000->0x24. This will add 0x5000 to app.exe's base address, dereference the result and then read out bytes starting from 0x24 after the resulting dereference.