So, still plodding on with this one... I think I've got to the "problem", but I need some help explaining what I've found.
Consider...
$ vol.py -f LinuxMint-17.3-Mate-x64-61951b91.vmem --profile LinuxMint173x64 linux_volshell
--SNIP--
>>> cc(pid=2476)
Current context: process example-0, pid=2476 DTB=0x38159000
>>> find("thisisthetext", max=1, length=16)
0x004011a1 74 68 69 73 69 73 74 68 65 74 65 78 74 00 65 6e thisisthetext.en
This looks good! "thisisthetext" is at 0x004011a1, comfortably in user space.
Use linux_memmap to find the physical offset...
Task Pid Virtual Physical Size
example-0 2476 0x0000000000401000 0x0000000015504000 0x1000
So my text should be at physical address 0x15504000 + 0x1a1 = 0x155041a1 == 357,581,217. So...
$ dd if=LinuxMint-17.3-Mate-x64-61951b91.vmem bs=1 skip=357581217 count=13 | xxd
13+0 records in
13+0 records out
13 bytes copied, 9.2586e-05 s, 140 kB/s
00000000: 7468 6973 6973 7468 6574 6578 74 thisisthetext
That seems to work out, so lets put that in a text file suitable for strings...
$ echo "357581217 thisisthetext" >/tmp/s
and run linux_strings...
$ vol.py -f LinuxMint-17.3-Mate-x64-61951b91.vmem --profile LinuxMint173x64 linux_strings -s /tmp/s
Volatility Foundation Volatility Framework 2.6
357581217 [kernel:8800155041a1] thisisthetext
I don't expect the module to be kernel or the memory address to be that?! What's happened??
A memmap of pid=1 (init) shows...
init 1 0x0000880015400000 0x0000000015400000 0x200000
So I'd expect logical address 0x8800155041a1 to be at physical address 0x15400000 + 0x1041a1 = 0x155041a1...
...which is the same physical address as the one we saw from the memmap of pid=2476 above!
A run of data in the physical file is mapped to kernel space AND user space of a process. Is this normal?
If it is normal, why didn't linux_strings report both kernel AND example-0?
Any comments very gratefullyasd received!