On 04/15/2015 04:27 AM, Felipe Monteiro de Carvalho wrote:
> Hello,
> 
> I am implementing a software to read JFS partitions in Windows/Mac OS
> X. Only reading, no writing involved.
> 
> It works already for many partitions, but someone sent me a disk, and
> this is something wrong with my interpretation of the JFS
> documentation or something like that, because for this particular
> disk, it doesn't work =(
> 
> I read in this order:
> 
> 1> Aggregate Map -> Always from offset A000
> 
> 2> Fileset zero inode -> Always from offset D000
> 
> Here I read _xtroot: xtpage_t; in this inode to obtain the next
> address. See the screenshot:
> 
> http://magnifier.sourceforge.net/tmp/jfs_fileset_zero_inode.png
> 
> And the data that I read here (data in the comments):
> 
> xtpage_t->xtpage_t = packed record
> xtpage_t->case Integer of 0: (
> // struct xtheader {
> xtpage_t->next: le64; //  0
> xtpage_t->prev: le64; //  0
> xtpage_t->flag: Byte; //  $85

flag = 0x85 - DXD_INDEX | BT_INTERNAL | BT_ROOT

This is an internal node of the xtree. This node is pointing to other
xtree nodes.

> xtpage_t->rsrvd1: Byte; //  0
> xtpage_t->nextindex: le16; //  3

slot 3 is the first unused slot. Only slot 2 is valid.

> xtpage_t->maxentry: le16; //  $12
> xtpage_t->rsrvd2: le16; //  0
> xtpage_t->self: pxd_t; // 0
> xtpage_t-> );
> 
> xtpage_t->xad[2] => xad_t
> xad_t->flag: Byte; //  0
> xad_t->rsvrd: uint16; //  0
> xad_t->off1: Byte; //  0
> xad_t->off2: le32; //  0
> xad_t->len: array[0..2] of Byte; // 1
> xad_t->addr1: Byte; //  0
> xad_t->addr2: le32; // 2754
> xad_t->addr calculated: 0x2754000

Look for another xtree page at block 0x2754000

> 
> xtpage_t->xad[3] => xad_t = packed record
> xad_t->flag: Byte; // 1: flag */ 0
> xad_t->rsvrd: uint16; // 2: reserved */ 0
> xad_t->off1: Byte; // 1: offset in unit of fsblksize */ 0
> xad_t->off2: le32; // 4: offset in unit of fsblksize */ 2
> xad_t->len: array[0..2] of Byte; // 3: length in unit of fsblksize */ 1
> xad_t->addr1: Byte; // 1: address in unit of fsblksize */ 0
> xad_t->addr2: le32; // 4: address in unit of fsblksize */ } 2000
> xad_t->addr calculated: 0x2000000
> 
> xtpage_t->xad[4] => xad_t = packed record
> brings addr 0x4000000
> etc
> 
> So my interpretation of the data is:
> 
> A> xad[2] is the control page
> B> xad[3] is the Fileset Zero Inode Allocation Map
> 
> Wierd that xad[2] has len=1 and xad[3] has offset=2 ... very wierd, as
> if the actual data is missing....
> 
> 3> So now I am at the Fileset Zero Inode Allocation Map at offset 0x2000000
> 
> Screenshots:
> 
> http://magnifier.sourceforge.net/tmp/jfs_fileset_zero_map_1.png
> http://magnifier.sourceforge.net/tmp/jfs_fileset_zero_map_2.png
> 
>>From it I read the following structures:
> 
> inoext[0]
> ->pxd_t.len: array[0..2] of Byte;// 4
> ->pxd_t.addr1: Byte;// 0
> ->pxd_t.addr2: le32; // 0x2004
> inoext[1]
> ->pxd_t.len: array[0..2] of Byte; // 4
> ->pxd_t.addr1: Byte; // 0
> ->pxd_t.addr2: le32; // 0x200C
> inoext[2]
> ->pxd_t.len: array[0..2] of Byte; // 4
> ->pxd_t.addr1: Byte; // 0
> ->pxd_t.addr2: le32; // 0x37B4
> 
> My conclusion is:
> 
> A> The root inode is located at the address given by inoext[0] which
> is: 0x2004400
> 
> Now the problem:
> 
> 0x2004400 is *not* the root inode =( It is an empty inode
> 
> I manually searched the disk and I found the real Root Inode at 0x26400!
> 
> Using this information I manually searched the disk and I concluded
> that 0x2000000 is probably also not Fileset Zero Inode Map =( I found
> an Inode Map candidate at 0x2B000 which has: inoext[0].pxd_t.addr2 =
> 0x26
> 
> But then I look again at the Fileset Zero inode D000 and I cannot find
> anything wrong with my reading of its data =( It doesn't feature the
> hex value 0x2B at all.
> 
> Any ideas what I did wrong here? It must be something simple that I am
> getting wrong, but after hours and hours reading the hex data, I just
> cannot find =) Any tips appreciated.
> 
> thanks,
> 

------------------------------------------------------------------------------
BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
Develop your own process in accordance with the BPMN 2 standard
Learn Process modeling best practices with Bonita BPM through live exercises
http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
_______________________________________________
Jfs-discussion mailing list
Jfs-discussion@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jfs-discussion

Reply via email to