작업물2011. 3. 2. 16:30
* 참 조 : dwoX

1. 라이브러리 헤더 블럭 (512 (1024) Byte, 괄호안은 유니코드)

시작 위치 끝 위치

Type

정보

1

4

Char(4) HDR*

5

18 (32)

String ‘PowerBuilder’ + 0x00 + 0x00

19 (33)

22 (40)

Char(4) PBL 포맷 버전 (0400 / 0500 / 0600)

23 (41)

26 (44)

Long 생성일자 (GMT +/- 0:00)

29 (45)

FF

String 라이브러리 코멘트

285 (559)

288 (562)

Long 첫 SCC Data Block 의 오프셋

289 (563)

292 (566)

Long SCC Data 의 Net 사이즈

 

2. 비트맵 블럭 (512 Byte)

시작 위치 끝 위치

Type

정보

1

4

Char(4) FRE*

5

8

Long 다음 블럭의 오프셋, 혹은 0

9

512

Bit(504) 비트맵, 각 Bit 는 하나의 블럭에 해당

(512 - 8) * 8 = 4032 Blocks are referenced


3. 노드 블럭 (3072 Byte)

시작 위치 끝 위치

Type

정보

1

4

Char(4) NOD*

5

8

Long 다음 좌변 블럭의 오프셋, 혹은 0

9

12

Long 상위 블럭의 오프셋, 혹은 0

13

16

Long 다음 우변 블럭의 오프셋, 혹은 0

17

18

Integer 블럭 내 남은 공간 (기본 3040 Byte 중)

19

20

Integer 현재 블럭 내 알파벳 순 첫 객체명

21

22

Integer 노드 내 엔트리 갯수

23

24

Integer 현재 블럭 내 알파벳 순 마지막 객체명

33

FF

Chunks ENT* 부분


4. 엔트리 (가변 길이, 괄호안은 유니코드)

시작 위치 끝 위치

Type

정보

1

4

Char(4) ENT*

5

8 (12)

Char(4) (CharW(4)) PBL 버전 (0400 / 0500 / 0600)

9 (13)

12 (16)

Long 첫번째 데이터 블럭의 오프셋

13 (17)

16 (20)

Long 객체 크기 (Net 사이즈)

17 (21)

20 (24)

Long 수정일자 (GMT +/- 0:00)

21 (25)

22 (26)

Integer 코멘트 길이

23 (27)

24 (28)

Integer 객체명 길이

25 (29)

FF

String (StringW) 객체명


5. 데이터 블럭 (512 Byte)

시작 위치 끝 위치

Type

정보

1

4

Char(4) DAT*

5

8

Long 다음 블럭의 오프셋, 혹은 0

9

10

Integer 데이터 블럭 길이

11

XXX

Blob{} 데이터 (최대 길이는 502 Byte)


6. 트레일러 블럭 (in DLL/EXE), 항상 마지막 블럭 (512 Byte)

시작 위치 끝 위치

Type

정보

1

4

Char(4) TRL*

5

8

Long 라이브러리 헤더 (HDR*) 의 오프셋

이후 SCC DATA, PB6/7 Status Flags, SCC DATA Chunk 에 관한 내용은 내가 쓰는 PowerBuilder 7 버전에서는 확인되지 않아서 생략.

 

위의 내용을 토대로 PBL 파일 내 객체, 각 객체의 소스, 검색 기능 등을 구현한 프로그램을 AutoIt 으로 작성해 보았다.

다운은 여기

Posted by cloim